全部,我有以下一些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;
}