如果未选中w / jQuery中的至少一个,请取消选中组复选框

时间:2011-11-03 22:37:40

标签: jquery

我有一组复选框,其中一个可以检查/取消选中整个组。此功能仅适用于未禁用的复选框。当我使用“main”复选框选择all然后取消选中下面的一个复选框时,我也应该取消选中主要复选框。但是,如果我检查下面的那个,从而进行全部检查,则应再次检查“主”。

我认为我的代码太复杂了:

var checkboxes = $("#myTable input[type=checkbox:enabled]:not(:first)").change(function() {
    var allIsChecked = checkboxes.length === checkboxes.filter(":checked").length;
    all[0].checked = allIsChecked;
});

var all = $("#checkAll").change(function() {
    checkboxes.attr("checked",this.checked);
});

2 个答案:

答案 0 :(得分:1)

您的选择器[type=checkbox:enabled]无效。您可以通过添加not($("#myTable input[disabled=disabled]"))来排除已禁用的单选按钮:

var $checkboxes = 
    $("#myTable input[type=checkbox]:not(:first)").
        not($("#myTable input[disabled=disabled]")).
        change(function() {
            var allIsChecked = $checkboxes.length === $checkboxes.filter(":checked").length;
            $all[0].checked = allIsChecked;
});

var $all = $("#checkAll").change(function() {
    $checkboxes.attr("checked", this.checked);
});

您可以测试here。选择所有子单选按钮或选择主单选按钮

答案 1 :(得分:0)

我认为您的代码可能更简单:

var checkboxes = $("#myTable input[type=checkbox]:not(:first)");
checkboxes.change(function() {
  var allIsChecked = checkboxes.filter(:enabled:not(:checked)).size() === 0;
  all[0].checked = allIsChecked;
});

 var all = $("#checkAll").change(function() {
  checkboxes.filter(":enabled").attr("checked",this.checked);
});

这只是检查没有启用和取消选中的复选框。我还在选择器中包含禁用复选框,以便在您重新启用其中一个选项后检查全部仍然有效。