我认为他们可以,但我没有把我的钱放在我的嘴(这么说)设置只读属性实际上似乎没有做任何事情。
我宁愿不使用Disabled,因为我希望选中的复选框与表单的其余部分一起提交,我只是不希望客户端能够在某些情况下更改它们。
我认为他们可以,但我没有把我的钱放在我的嘴(这么说)设置只读属性实际上似乎没有做任何事情。
我宁愿不使用Disabled,因为我希望选中的复选框与表单的其余部分一起提交,我只是不希望客户端能够在某些情况下更改它们。
当前回答
在旧的HTML中可以使用
<input type="checkbox" disabled checked>text
但实际上不建议只使用旧的HTML,现在你应该使用XHTML。
在格式良好的XHTML中必须使用
<input type="checkbox" disabled="disabled" checked="checked" />text <!-- if yu have a checked box-->
<input type="checkbox" disabled="disabled" />text <!-- if you have a unchecked box -->
格式良好的XHTML需要XML表单,这就是使用disabled="disabled"而不是简单地使用disabled的原因。
其他回答
<input type="checkbox" onclick="this.checked=!this.checked;">
但你绝对必须验证服务器上的数据,以确保它没有被更改。
当将一个HTML复选框发布到服务器时,它有一个字符串值'on'或''。
Readonly不会停止用户编辑复选框,disabled会停止返回的值。 解决这个问题的一种方法是使用一个隐藏元素来存储实际值,而显示的复选框是一个禁用的dummy。通过这种方式,复选框状态在帖子之间被持久化。
这是一个函数。它使用'T'或'F'的字符串,你可以以任何你喜欢的方式更改它。这是在一个ASP页面中使用的使用服务器端的VB脚本。
public function MakeDummyReadonlyCheckbox(i_strName, i_strChecked_TorF)
dim strThisCheckedValue
if (i_strChecked_TorF = "T") then
strThisCheckedValue = " checked "
i_strChecked_TorF = "on"
else
strThisCheckedValue = ""
i_strChecked_TorF = ""
end if
MakeDummyReadonlyCheckbox = "<input type='hidden' id='" & i_strName & "' name='" & i_strName & "' " & _
"value='" & i_strChecked_TorF & "'>" & _
"<input type='checkbox' disabled id='" & i_strName & "Dummy' name='" & i_strName & "Dummy' " & _
strThisCheckedValue & ">"
end function
public function GetCheckbox(i_objCheckbox)
select case trim(i_objCheckbox)
case ""
GetCheckbox = "F"
case else
GetCheckbox = "T"
end select
end function
在ASP页面的顶部,你可以提取持久值…
strDataValue = GetCheckbox(Request.Form("chkTest"))
当你想输出你的复选框时,你可以这样做…
response.write MakeDummyReadonlyCheckbox("chkTest", strDataValue)
我已经测试过了,它工作得很好。它也不依赖于JavaScript。
目前的大多数答案都有以下一个或多个问题:
只检查鼠标而不是键盘。 只检查页面加载。 挂钩总是流行的变更或提交事件,如果有其他东西挂钩它们,它们就不会总是有效。 需要一个隐藏的输入或其他特殊的元素/属性,你必须撤销,以便重新启用复选框使用javascript。
下面的方法很简单,没有这些问题。
$('input[type="checkbox"]').on('click keyup keypress keydown', function (event) {
if($(this).is('[readonly]')) { return false; }
});
如果复选框是只读的,它不会改变。如果不是,也会是。它确实使用了jquery,但你可能已经在使用它了…
它的工作原理。
最简单的(在我看来):
onclick="javascript:{this.checked = this.defaultChecked;}"
只读对<input type='checkbox'>无效
所以,如果你需要从表单中禁用的复选框中提交值,你可以使用jQuery:
$('form').submit(function(e) {
$('input[type="checkbox"]:disabled').each(function(e) {
$(this).removeAttr('disabled');
})
});
通过这种方式,在提交表单时从元素中删除禁用属性。