首页 文章

为什么单选按钮不能“只读”?

提问于
浏览
178

我想显示一个单选按钮,提交其值,但根据具体情况,让它不可编辑 . 禁用不起作用,因为它没有提交值(或者是吗?),它会使单选按钮变灰 . 只读是我正在寻找的,但由于一些神秘的原因,它不起作用 .

是否有一些奇怪的技巧我需要拉动以使只读按预期工作?我应该用JavaScript代替吗?

顺便说一句,有没有人知道为什么只读在单选按钮中不起作用,而它在其他输入标签中有效?这是HTML规范中难以理解的遗漏之一吗?

13 回答

  • 1

    对于未选择的单选按钮,将它们标记为已禁用 . 这可以防止他们响应用户输入并清除已检查的单选按钮 . 例如:

    <input type="radio" name="var" checked="yes" value="Yes"></input>
    <input type="radio" name="var" disabled="yes" value="No"></input>
    
  • 18

    如果有其他选项,单选按钮只需要是只读的 . 如果您没有任何其他选项,则无法取消选中已选中的单选按钮 . 如果您有其他选项,则可以通过禁用其他选项来阻止用户更改值:

    <input type="radio" name="foo" value="Y" checked>
    <input type="radio" name="foo" value="N" disabled>
    

    小提琴:http://jsfiddle.net/qqVGu/

  • 10

    我发现使用 onclick='this.checked = false;' 在一定程度上起作用 . 单击的单选按钮将不会被选中 . 但是,如果选择了一个单选按钮(例如,默认值),该单选按钮将被取消选中 .

    <!-- didn't completely work -->
    <input type="radio" name="r1" id="r1" value="N" checked="checked" onclick='this.checked = false;'>N</input>
    <input type="radio" name="r1" id="r1" value="Y" onclick='this.checked = false;'>Y</input>
    

    对于这种情况,单独保留默认值并禁用其他单选按钮会保留已选择的单选按钮并防止其被取消选中 .

    <!-- preserves pre-selected value -->
    <input type="radio" name="r1" id="r1" value="N" checked="checked">N</input>
    <input type="radio" name="r1" id="r1" value="Y" disabled>Y</input>
    

    此解决方案不是阻止更改默认值的最优雅方法,但无论是否启用了javascript,它都将起作用 .

  • 1

    在init上:

    pscript = "try{if($(this).attr('readonly')){return false;};}catch(err){};"
    
    Me.Attributes.Add("onclick", pscript)
    

    Gonza配音

  • -2

    JavaScript方式 - 这对我有用 .

    <script>
    $(document).ready(function() {
       $('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); });
    });
    </script>
    

    原因:

    • $('#YourTableId').find('*') - >返回所有标签 .

    • $('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); }); 迭代在此捕获的所有对象并禁用输入标记 .

    分析(调试):

    • form:radiobutton 在内部被视为"input"标签 .

    • 与上面的函数()类似,如果你尝试打印 document.write(this.tagName);

    • 无论在哪里,在标签中找到单选按钮,它都会返回一个输入标签 .

    因此,通过将*替换为输入,上面的代码行可以针对单选按钮标记进行更优化: $('#YourTableId').find('input').each(function () { $(this).attr("disabled", true); });

  • 1

    尝试属性 disabled ,但我认为你不会得到单选按钮的值 . 或者设置图像,如:

    <img src="itischecked.gif" alt="[x]" />radio button option
    

    最好的祝福 .

  • 98

    最好的解决方案是设置已检查或未检查的状态(来自客户端或服务器),并且不让用户在病房(即使其只读)之后更改它,执行以下操作:

    <input type="radio" name="name" onclick="javascript: return false;" />
    
  • 2

    我有一个冗长的形式(250个字段)发布到数据库 . 这是一个在线就业申请 . 当管理员查看已归档的应用程序时,表单将填充来自db的数据 . 输入文本和textareas将替换为他们提交的文本,但无线电和复选框对于保留为表单元素非常有用 . 禁用它们会使它们更难阅读 . 将.checked属性设置为false onclick将不起作用,因为填写应用程序的用户可能已经检查过它们 . 无论如何...

    onclick="return false;"
    

    就像'禁用'收音机和复选框的魅力一样 .

  • -1

    一个相当简单的选择是创建一个在表单上调用的javascript函数's 287167 event to enable the radiobutton back so that it'的值与表单的其余部分一起发布 .
    它似乎不是对HTML规范的遗漏,而是一个设计选择(逻辑一个,恕我直言),一个无线电按钮可以't be readonly as a button can' t,如果你不想使用它,那么禁用它 .

  • 192

    如何在JS中捕获“On_click()”事件并在此处进行检查?:

    http://www.dynamicdrive.com/forums/showthread.php?t=33043

  • 7

    我只通过禁用未检查的单选按钮,在单选按钮上伪造了只读 . 它使用户不会选择不同的值,并且选中的值将始终在提交时发布 .

    使用jQuery进行只读:

    $(':radio:not(:checked)').attr('disabled', true);
    

    除了您需要禁用每个未选择的选项外,此方法还可用于只读选择列表 .

  • 1

    这是你可以使用的技巧 .

    <input type="radio" name="name" onclick="this.checked = false;" />
    
  • 2

    我想出了一个javascript密集的方法来实现复选框和单选按钮的只读状态 . 它针对当前版本的Firefox,Opera,Safari,谷歌Chrome以及当前和以前版本的IE(低至IE7)进行了测试 .

    为什么不简单地使用你问的残疾人 property ?打印页面时,禁用的输入元素以灰色显示 . 实现此功能的客户希望所有元素都出现相同的颜色 .

    我不确定我是否可以在这里发布源代码,因为我在为公司工作时开发了这个源代码,但我可以肯定地分享这些概念 .

    使用onmousedown事件,您可以在单击操作更改之前读取选择状态 . 因此,您存储此信息,然后使用onclick事件恢复这些状态 .

    <input id="r1" type="radio" name="group1" value="r1" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 1</input>
    <input id="r2" type="radio" name="group1" value="r2" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 2</input>
    <input id="r3" type="radio" name="group1" value="r3" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 3</input>
    
    <input id="c1" type="checkbox" name="group2" value="c1" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 1</input>
    <input id="c2" type="checkbox" name="group2" value="c2" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 2</input>
    <input id="c3" type="checkbox" name="group2" value="c3" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 3</input>
    

    的javascript部分然后这会像这样工作(再次只是概念):

    var selectionStore = new Object();  // keep the currently selected items' ids in a store
    
    function storeSelectedRadiosForThisGroup(elementName) {
        // get all the elements for this group
        var radioOrSelectGroup = document.getElementsByName(elementName);
    
        // iterate over the group to find the selected values and store the selected ids in the selectionStore
        // ((radioOrSelectGroup[i].checked == true) tells you that)
        // remember checkbox groups can have multiple checked items, so you you might need an array for the ids
        ...
    }
    
    function setSelectedStateForEachElementOfThisGroup(elementName) {
        // iterate over the group and set the elements checked property to true/false, depending on whether their id is in the selectionStore
        ...
    
        // make sure you return false here
        return false;
    }
    

    您现在可以通过更改输入元素的onclick和onmousedown属性来启用/禁用单选按钮/复选框 .

相关问题