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

我宁愿不使用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" name="Name" checked onchange='this.checked = true;'>

基于以上答案,如果使用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>

如果你想让它们以表单的形式提交给服务器,但对用户来说不是交互式的,你可以在css中使用pointer-events: none(适用于所有现代浏览器,除了IE10-和Opera 12-),并将tab-index设置为-1以防止通过键盘更改。还要注意,你不能使用标签标签,因为点击它会改变状态。

input[type="checkbox"][readonly] { pointer-events: none !important; } td { min-width: 5em; text-align: center; } td:last-child { text-align: left; } <table> <tr> <th>usual <th>readonly <th>disabled </tr><tr> <td><input type=checkbox /> <td><input type=checkbox readonly tabindex=-1 /> <td><input type=checkbox disabled /> <td>works </tr><tr> <td><input type=checkbox checked /> <td><input type=checkbox readonly checked tabindex=-1 /> <td><input type=checkbox disabled checked /> <td>also works </tr><tr> <td><label><input type=checkbox checked /></label> <td><label><input type=checkbox readonly checked tabindex=-1 /></label> <td><label><input type=checkbox disabled checked /></label> <td>broken - don't use label tag </tr> </table>

我的解决方案实际上与FlySwat的解决方案相反,但我不确定它是否适用于您的情况。我有一组复选框,每个复选框都有一个提交表单的onClick处理程序(它们用于更改表的过滤器设置)。我不想允许多次单击,因为第一次单击之后的后续单击将被忽略。所以我禁用所有复选框后,第一次点击,并提交后的形式:

onclick = " document.forms [' form1’]。submit ();$('#filters input').each(function() {this。Disabled = true});"

复选框位于ID为“filters”的span元素中——代码的第二部分是一个jQuery语句,它遍历复选框并禁用每个复选框。这样,复选框值仍然通过表单提交(因为表单是在禁用它们之前提交的),并且它可以防止用户更改它们,直到页面重新加载。

另一个“简单的解决方案”:

<!-- field that holds the data -->
<input type="hidden" name="my_name" value="1" /> 
<!-- visual dummy for the user -->
<input type="checkbox" name="my_name_visual_dummy" value="1" checked="checked" disabled="disabled" />

禁用=“禁用” / 禁用=真