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

时间:2012-08-06 01:00:22

标签: php 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.但是,只要我从代码中删除了禁用,它的长度至少为1.我知道如何让这段代码与禁用的复选框一起使用?

5 个答案:

答案 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;
}