我有一组复选框,其中一个可以检查/取消选中整个组。此功能仅适用于未禁用的复选框。当我使用“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);
});
答案 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);
});
这只是检查没有启用和取消选中的复选框。我还在选择器中包含禁用复选框,以便在您重新启用其中一个选项后检查全部仍然有效。