全部, 我有以下一点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.但是,只要我从代码中删除了禁用,它的长度至少为1.我知道如何让这段代码与禁用的复选框一起使用?
答案 0 :(得分:2)
serializeArray
模仿表单提交。提交表单时,不会发送已禁用的元素。
改为使用is(":checked")
。
jQuery(".gear_checkout_checkbox").is(":checked")
来自docs:
.serializeArray()方法使用标准的W3C规则 成功的控制,以确定它应包括哪些元素;在 特别是该元素不能被禁用,必须包含一个名称 属性。
答案 1 :(得分:1)
无论是否选中,都不会发送已禁用的复选框。因此serializeArray
不会接听它。您应该检查复选框本身是否已被选中,而不是是否会被提交。
答案 2 :(得分:1)
禁用的输入将不会显示,因为它已被禁用。检查它的事实并不重要。
如果您正在使用jQuery来启用和禁用该复选框,则可以在禁用复选框时使用jQuery在隐藏输入上设置值(并在再次启用该复选框时再次更改它)。然后,您可以处理隐藏的输入以及复选框,并执行正确的操作。
另一种可能性是根本不禁用复选框,但是然后使用CSS更改来指示它已被锁定并捕获onchange事件以防止它被修改。
答案 3 :(得分:1)
这是已禁用输入的记录行为。来自jQuery docs on .serializeArray()
:
.serializeArray()方法使用标准W3C规则来成功控制,以确定它应包含哪些元素;特别是该元素无法禁用,并且必须包含name属性。
只需使用:checked
selector [jQuery docs]检查复选框的长度,如下所示:
if (jQuery(".gear_checkout_checkbox:checked").length === 0)
答案 4 :(得分:0)
您可以使用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;
}