2014-08-29 77 views
0

我有几个复选框,其中一些复选框已在页面加载时进行检查。选中限制复选框,包含在页面加载时检查的框

我想要做的是禁用其他复选框,如果2框被选中。

我的代码工作正常,如果我检查/取消选中框自己。但是当2个盒子在页面加载时已经被检查(使用javascript或者HTML)时,其他盒子仍然可以被检查直到盒子被禁用。

由于已在页面加载中检查了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

刚刚火了.change()事件在页面加载时:

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

jsFiddle example

+0

是的,这是一个比我的绝对更好的解决方案。 – Ohgodwhy 2014-08-29 16:45:51

+0

完美,谢谢! – Dean 2014-08-29 17:11:58

1

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

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