问题“如何使单选按钮只读?”已经被问过
n
次了。但解决方案总是disabled="disabled"
.
(也可以有复杂的 JavaScript 解决方案,它与
click
或 change
事件一起工作并防止值的更改,但所有这些通常或多或少都有肮脏的黑客气味。)
disabled="disabled"
的问题/副作用是,它从数据集中“删除”字段,然后不发送到服务器。
我想要的是使单选按钮只读/不可更改——但同时让它们在表单提交时发送到服务器。
disabled
不符合这个要求,readonly
似乎不适用于单选按钮。
使单选按钮只读而不将其从表单数据集中删除的正确 HTML 属性是什么?
尝试使用一些 CSS:
input[type="radio"].readonly {
opacity: 0.5; /* not necessary */
pointer-events: none;
}
如果这是你的意思。你有一个
radio button
它有一个值,你不希望删除或更改该值,但你想将它显示给用户可能会通知他的同意。然后我认为这应该有效。
给
radio button
一个单独分配给它的name
属性以及像这样的checked
属性。
<input type="radio " name="my_radio_btn" value="its_value" checked />
这样用户就无法取消勾选
这可能看起来有点 hacky,但您可以将单选按钮的值设置为其触发
onclick
事件时的初始状态。
<!DOCTYPE html>
<html>
<body>
<input id="button1" type="radio" onmouseover="setValue(this)" onclick="retainValue(this)" checked> Radio Example
<input id="button2" type="radio" onmouseover="setValue(this)" onclick="retainValue(this)"> Radio Example
<script>
var checkboxes = {};
function setValue(el) {
if(!(el.id in checkboxes))
checkboxes[el.id] = el.checked;
}
function retainValue(el) {
if(!(el.id in checkboxes))
checkboxes[el.id] = el.checked;
el.checked = checkboxes[el.id];
}
</script>
</body>
</html>
它允许您在页面上拥有任意数量的收音机,前提是每个收音机都有唯一的 ID。
如果你愿意使用 jQuery 那么它会很容易完成。
如果最初选中了一个只读单选按钮,您可以禁用组中的所有其他单选按钮:
<input name="my_field" value="A" type="radio" checked="checked"/>
<input name="my_field" value="B" type="radio" disabled="disabled"/>
…
那么用户就不能有效的点击任何地方进行更改;但选中的输入将生成响应字段。