我有几个复选框,其中一些已在页面加载时检查过。
如果选中了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>
答案 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();