检查JQuery长度不起作用

时间:2017-03-23 23:29:57

标签: javascript jquery

我想检查是否选中了两个复选框并启用其他复选框。请注意,无法访问HTML。任何提示都可能有所帮助,因为这可能很容易解决。

以下代码:

 //this disables checkboxes on load
 for (var i = 1; i < 5; i++){
        $("#xQ7v3_" +i).prop("disabled", true );
        $("#xQ7v4_" +i).prop("disabled", true );

    }
     //if any two ids are checked want to enable the ones that are disabled on load but does not work basically does nothing, no console errors
     $('#xQ7v1_1, #xQ7v2_1, #xQ7v1_2, #xQ7v2_2, #xQ7v1_3, #xQ7v2_3, #xQ7v1_4, #xQ7v2_4').change(function() {
        for (var i = 1; i < 5; i++)
        if ($('#xQ7v1_1, #xQ7v2_1, #xQ7v1_2, #xQ7v2_2, #xQ7v1_3, #xQ7v2_3, #xQ7v1_4, #xQ7v2_4').is(':checked').length > 1 ) {

            $("#xQ7v3_" +i).prop("disabled", false );
            $("#xQ7v4_" +i).prop("disabled", false );

        } else{

            $("#xQ7v3_" +i).prop("disabled", true );
            $("#xQ7v4_" +i).prop("disabled", true );


        }

    });

2 个答案:

答案 0 :(得分:2)

Jquery的.is()在...之后返回一个布尔值。

  

根据选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回 true


这意味着您需要从

更改jquery选择器
$('#xQ7v1_1, #xQ7v2_1, #xQ7v1_2, #xQ7v2_2, #xQ7v1_3, #xQ7v2_3, #xQ7v1_4, #xQ7v2_4').is(':checked').length

为...

$('#xQ7v1_1:checked, #xQ7v2_1:checked, #xQ7v1_2:checked, #xQ7v2_2:checked, #xQ7v1_3:checked, #xQ7v2_3:checked, #xQ7v1_4:checked, #xQ7v2_4:checked').length


一个例子:

$("input").change(() => {
  console.log($('#check1:checked, #check2:checked').length);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<input id=check1 type="checkbox" id="1" name="1">
<label for="1">Box 1</label>

<input id="check2" type="checkbox" id="2" name="2">
<label for="1">Box 2</label>

答案 1 :(得分:2)

我注意到所有ID都以xQ7v开头,为什么不简化为: $("input[id^='xQ7v']:checked").length