0

所有,我有以下一点 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。知道如何让此代码与禁用的复选框一起使用吗?

4

5 回答 5

2

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

改为使用is(":checked")

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

文档

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

于 2012-08-06T01:04:35.080 回答
1

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

于 2012-08-06T01:04:45.650 回答
1

禁用的输入将不会显示,因为它已被禁用。检查它的事实没有任何意义。

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

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

于 2012-08-06T01:04:50.823 回答
1

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

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

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

if (jQuery(".gear_checkout_checkbox:checked").length === 0) 
于 2012-08-06T01:05:30.517 回答
0

您可以使用lengthjQuery 对象的属性而不是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;
}
于 2012-08-06T01:04:13.223 回答