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

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


当前回答

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

<!-- 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" />

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

其他回答

READONLY对复选框不起作用,因为它阻止你编辑字段的值,但有了复选框,你实际上是在编辑字段的状态(在||关闭)

从faqs.org:

READONLY只是阻止用户更改字段的值,而不是阻止用户与字段交互,理解这一点很重要。例如,在复选框中,您可以打开或关闭复选框(从而设置CHECKED状态),但不能更改字段的值。

如果不想使用disabled,但仍然想提交值,那么当值不满足编辑条件时,将值作为隐藏字段提交并将其内容打印给用户如何?如。

// user allowed change
if($user_allowed_edit)
{
    echo '<input type="checkbox" name="my_check"> Check value';
}
else
{
    // Not allowed change - submit value..
    echo '<input type="hidden" name="my_check" value="1" />';
    // .. and show user the value being submitted
    echo '<input type="checkbox" disabled readonly> Check value';
}

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

<!-- 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" />

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

我知道“disabled”不是一个可接受的答案,因为操作希望它发布。但是,即使设置了只读选项集,也必须在服务器端验证值。这是因为您无法阻止恶意用户使用readonly属性发布值。

我建议存储原始值(服务器端),并将其设置为禁用。然后,当他们提交表单时,忽略发布的任何值,并使用您存储的原始值。

它的外观和行为都像一个只读值。它处理(忽略)来自恶意用户的帖子。你真是一举两得。

目前的大多数答案都有以下一个或多个问题:

只检查鼠标而不是键盘。 只检查页面加载。 挂钩总是流行的变更或提交事件,如果有其他东西挂钩它们,它们就不会总是有效。 需要一个隐藏的输入或其他特殊的元素/属性,你必须撤销,以便重新启用复选框使用javascript。

下面的方法很简单,没有这些问题。

$('input[type="checkbox"]').on('click keyup keypress keydown', function (event) {
    if($(this).is('[readonly]')) { return false; }
});

如果复选框是只读的,它不会改变。如果不是,也会是。它确实使用了jquery,但你可能已经在使用它了…

它的工作原理。

或者是:

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