禁用复选框未显示为在jQuery中选中


Disabled Checkbox is not showing as checked in jQuery

全部,我有以下一些PHP来检查复选框:

<input type="checkbox" name="check_out_gear[]" id="'.$resultsetgear['gear_checkout_id'].'" value="'.$resultsetgear['gear_checkout_id'].'" class="gear_checkout_checkbox" checked disabled>

该代码运行良好,复选框被选中并被禁用。我正在检查它是否至少有一个复选框通过使用以下jQuery被选中:

var fields = jQuery(".gear_checkout_checkbox").serializeArray(); 
if (fields.length == 0) 
{ 
    jQuery.wl_Alert('Please select a piece of equipment that you''re checking out!','warning','#no_answers','#workform', {sticky:false}); 
    one_selected = false;
}

选中并禁用该复选框时,长度始终为0。然而,一旦我从代码中删除了disabled,它的长度至少为1。知道我如何让这个代码与禁用的复选框一起工作吗?

serializeArray模拟表单提交。提交表单时,禁用的元素不会被发送。

请改用is(":checked")

jQuery(".gear_checkout_checkbox").is(":checked")

来自文档:

.serializeArray()方法使用W3C标准规则成功控制,以确定应包括哪些要素;在里面特别是元素不能被禁用,并且必须包含名称属性

这是禁用输入的行为文档。来自.serializeArray():上的jQuery文档

.serializeArray()方法使用W3C成功控件的标准规则来确定它应该包含哪些元素;特别是元素不能被禁用并且必须包含name属性。

只需使用:checked选择器检查复选框的长度[jQuery docs],如下所示:

if (jQuery(".gear_checkout_checkbox:checked").length === 0) 

无论是否选中,都不会发送禁用的复选框。因此它不会被serializeArray拾取。您应该检查复选框本身是否被选中,而不是它是否会被提交。

禁用的输入将不会显示,因为它已被禁用。事实上,它被检查是没有后果的。

如果使用jQuery启用和禁用复选框,则可以使用jQuery在禁用复选框时为隐藏输入设置值(并在再次启用复选框时再次更改值)。然后,您可以处理隐藏的输入以及复选框,并执行正确的操作。

另一种可能性是根本不禁用复选框,而是使用CSS更改来指示它已锁定,并捕获onchange事件以防止其被修改。

您可以使用jQuery对象的length属性,而不是serializeArray()方法返回的数组的长度,请尝试以下操作:

if ($(".gear_checkout_checkbox:checked").length === 0) { 
    jQuery.wl_Alert('Please select a piece of equipment that you''re checking out!','warning','#no_answers','#workform', {sticky:false}); 
    one_selected = false;
}