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

mcv*_*mcv 198 html readonly radio-button

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

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

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

Sam*_*son 199

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

<input type="radio" name="foo" value="Y" checked>
<input type="radio" name="foo" value="N" disabled>
Run Code Online (Sandbox Code Playgroud)

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

  • 解决方案1请!它是唯一可以正常访问的.如果你需要编写脚本,那么只有一行可以将隐藏字段的启用设置为与无线电启用相反的功能. (7认同)
  • 我刚刚注意到解决方案2和3已经在Jonathan的答案中切换了位置,所以现在这些评论似乎没有多大意义. (5认同)
  • 你的第一个解决方案的问题是,如果我想通过javascript启用radiobutton,我突然有两个具有相同名称的字段,所以我必须清理其中一个.或者使用隐藏的一个用于实际,并使用单选按钮设置隐藏字段的值.以太方式,它比我想要的无线电设备稍微麻烦一点.你的第二个解决方案,虽然我不怀疑它是否有效,但听起来像是一个非常难看的黑客.所以我猜javascript解决方案是唯一符合我标准的解决方案.我会顺其自然. (3认同)
  • 当我设置无线电"禁用"时,我添加"style = cursor:default"来删除"禁用光标". (2认同)

Meg*_*gan 131

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

使用jQuery进行只读:

$(':radio:not(:checked)').attr('disabled', true);
Run Code Online (Sandbox Code Playgroud)

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

  • 这个变体允许你使用`readonly`属性,因为OP期望它工作:`$(':radio [readonly]:not(:checked)').attr('disabled',true); ` (8认同)
  • 谢谢@Megan,这是一个很好的解决方案 (2认同)

Sar*_*raz 22

这是你可以使用的技巧.

<input type="radio" name="name" onclick="this.checked = false;" />
Run Code Online (Sandbox Code Playgroud)

  • 正如我所想的那样,如果你澄清它应该是`onClick ="this.checked = <%= value%>"`某种多样的:)会是最好的:) (4认同)
  • 对我来说不是问题.我们已经使用了大量的jQuery和Ajax. (3认同)
  • 值得注意的是,您可以只执行 `onclick="return false;"` 来保持组的值相同 (2认同)

hum*_*ght 10

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

onclick="return false;"
Run Code Online (Sandbox Code Playgroud)

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


Vip*_*esh 8

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

<input type="radio" name="name" onclick="javascript: return false;" />
Run Code Online (Sandbox Code Playgroud)

  • 他们可以轻松地删除“只读”属性(如果有的话)。或者只是用他们的数据伪造整个请求。服务器端验证超出了这个问题的范围。 (2认同)