我认为他们可以,但我没有把我的钱放在我的嘴(这么说)设置只读属性实际上似乎没有做任何事情。

我宁愿不使用Disabled,因为我希望选中的复选框与表单的其余部分一起提交,我只是不希望客户端能够在某些情况下更改它们。


当前回答

在提交表单时,我们实际上传递的是复选框的值,而不是状态(选中/未选中)。只读属性阻止我们编辑值,但不能编辑状态。如果您希望使用一个只读字段来表示要提交的值,请使用只读文本。

其他回答

最简单的(在我看来):

onclick="javascript:{this.checked = this.defaultChecked;}"

或者是:

$('your selector').click(function(evt){evt.preventDefault()});

基于以上答案,如果使用jQuery,这可能是所有输入的一个很好的解决方案:

<script>
    $(function () {
        $('.readonly input').attr('readonly', 'readonly');
        $('.readonly textarea').attr('readonly', 'readonly');
        $('.readonly input:checkbox').click(function(){return false;});
        $('.readonly input:checkbox').keydown(function () { return false; });
    });
</script>

我对Asp使用这个。Net MVC设置一些表单元素为只读。通过将任何父容器设置为.readonly,上述方法适用于文本和复选框,例如以下场景:

<div class="editor-field readonly">
    <input id="Date" name="Date" type="datetime" value="11/29/2012 4:01:06 PM" />
</div>
<fieldset class="flags-editor readonly">
     <input checked="checked" class="flags-editor" id="Flag1" name="Flags" type="checkbox" value="Flag1" />
</fieldset>
onclick="javascript: return false;"

如果你知道复选框总是被选中,下面的工作:

<input type="checkbox" name="Name" checked onchange='this.checked = true;'>