支持全选的 checkbox

写前端页面时我们可能会需要实现一个全选功能的复选框,如链接 checkall.html 实现的效果,简单描述下实现原理,首先需要 jquery 支持(版本 3.2.1、2.2.4、1.12.4 已验证通过),看下源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    function bindEventForChedkBoxByName(checkAllName, checkSingleName) {
var checkAll = $("input:checkbox[name='" + checkAllName + "']");//获取名字为checkAllName的复选框
var checkSingle = $("input:checkbox[name='" + checkSingleName + "']");//获取名字为checkSingleName的复选框
var singleCount = $(checkSingle).length;//所有名字为checkSingleName的复选框的数目

$(checkAll).change(function (event) {//为名字为checkAllName的复选框绑定change事件
$(checkSingle).prop('checked', $(this).prop('checked'));//每次checkAllName的复选框状态变化时,将所有名字为checkSingleName的复选框置为其相同状态
event.stopPropagation();
});

$(checkSingle).change(function (event) {//为名字为checkSingleName的复选框绑定change事件
var selectedSingle = $("input:checkbox[name='" + checkSingleName + "']:checked");//已选中的名字为checkSingleName的复选框
var selectedCount = $(selectedSingle).length;//已选中的名字为checkSingleName的复选框的数目
$(checkAll).prop('checked', (selectedCount == singleCount));//所有名字为checkSingleName的复选框都选中时,将名字为checkAllName的复选框置为选中,反之置为不选中
event.stopPropagation();
});
}
```

使用步骤:

1. 引入 jquery `<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>`
2. 引入上述代码
3. 在文档加载完后绑定事件。假定全选的 checkbox 名字为`testAll`,单个的为`testSingle`,在 script 模块加入

```js
$(document).ready(function(){
bindEventForChedkBoxByName("testAll","testSingle");
});