选中限制复选框,包括在页面加载时选中的复选框

时间:2014-08-29 16:41:27

标签: javascript jquery checkbox

我有几个复选框,其中一些已在页面加载时检查过。

如果选中了2个框,我想要禁用其他复选框。

如果我自己选中/取消选中复选框,我的代码就可以了。但是当在页面加载时已经检查了2个框(使用javascript或HTML)时,仍然可以检查另一个框,直到框被禁用。

由于在页面加载时已经检查了2个框,因此应该禁用其他复选框,直到我取消选中2个复选框之一。目前情况并非如此。

这是我的javascript:

jQuery(function($) {

 var max = 2;
 var checkboxes = $('input[type="checkbox"]');

  checkboxes.change(function(){
      var current = checkboxes.filter(':checked').length;
      checkboxes.filter(':not(:checked)').prop('disabled', current >= max);
  });

   $('.one').attr('checked','checked');
   $('.two').attr('checked','checked');

});

低于我的复选框:

        <div id="checkboxes">
                <input type="checkbox" class="1" id="checkbox" name='Some[array]' value="1"> 
                <input type="checkbox" class="2" id="checkbox" name='Some[array]' value="2"> 
                <input type="checkbox" class="3" id="checkbox" name='Some[array]' value="3"> 
                <input type="checkbox" class="4" id="checkbox" name='Some[array]' value="4"> 
        </div>

2 个答案:

答案 0 :(得分:2)

只需在页面加载时触发.change()事件:

checkboxes.change(function () {
    var current = checkboxes.filter(':checked').length;
    checkboxes.filter(':not(:checked)').prop('disabled', current >= max);
}).change();

<强> jsFiddle example

答案 1 :(得分:1)

您的选择器错误,如果以编程方式更改值,则checked事件不会触发。但是,您可以手动触发更改事件,以便在最初设置值时强制执行代码。使用以下两行:

$('.1').prop('checked','checked').change();
$('.2').prop('checked','checked').change();