javascript - 选中/取消选中所有复选框

标签 javascript jquery checkbox

我见过许多选中/取消选中所有复选框的脚本。但大多数人并不尊重,如果我使用“全部选中”复选框切换所有复选框,然后取消选中列表中的一个复选框,“全部选中”复选框仍处于选中状态。

有没有一种优雅的方式来处理这种情况?

最佳答案

$('#checkAll').click(function() {
    if(this.checked) {
        $('input:checkbox').attr('checked', true);
    }
    else {
        $('input:checkbox').removeAttr('checked');
    }
});

$('input:checkbox:not(#checkAll)').click(function() {
    if(!this.checked) {
        $('#checkAll').removeAttr('checked');
    }
    else {
        var numChecked = $('input:checkbox:checked:not(#checkAll)').length;
        var numTotal = $('input:checkbox:not(#checkAll)').length;
        if(numTotal == numChecked) {
            $('#checkAll').attr('checked', true);
        }
    }
});

演示:http://jsfiddle.net/ThiefMaster/HuM4Q/

正如问题评论中指出的那样,常规复选框对此并不完美。只要一个 复选框未选中,我的实现就会禁用“全部选中”框。因此,要取消选中所有仍处于选中状态的复选框,您必须单击两次(首先重新选中未选中的复选框,然后取消选中所有其他复选框)。 但是,对于三态复选框,这可能仍然是必要的,因为状态顺序可能是未选中->不确定->选中->未选中,因此您需要单击两次才能从不确定变为未选中。


因为您可能不想用“全选”检查页面上的所有复选框,请将 input:checkbox 替换为例如.autoCheckBoxinput.autoCheckBox:checkbox 并赋予这些复选框 class="autoCheckBox"

如果您想要某个表单中的所有复选框,只需使用 #idOfYourForm input:checkboxform[name=nameOfYourForm] input:checkbox

关于javascript - 选中/取消选中所有复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805056/

相关文章:

javascript - fullpage.js 与 mobile.js 和 camera.js 的不兼容问题

swift - moveRowAtIndexPath 后重新加载数据

java - 通过打开/关闭 300 多个复选框来改善用户体验

javascript - 月/日/年函数问题

javascript - 在javascript中填充六边形区域

javascript - md-autocomplete 未显示

javascript - 将类作为函数参数传递

javascript - 数据表隐藏行

jquery - 访问控制允许解析应用程序调用中缺少 Origin header

javascript - {显示 :none} not working with checkbox?