checkbox全选与反选
2016-07-27 12:54
399 查看
用原生js跟jquery实现checkbox全选反选的一个例子
原生js:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>checkbox</title>
</head>
<body>
<div id="check-all">
<input type="checkbox" name="check-all">全选
</div>
<div id="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
</div>
<script>
var checkAll = document.querySelector('[name=check-all]');
var subCheckbox = document.querySelectorAll('[name=sub-checkbox]');
//绑定全选、反选事件
checkAll.addEventListener('change', function () {
if (this.checked) {
for (var i = 0; i < subCheckbox.length; i++) {
subCheckbox[i].checked = true;
}
} else {
for (var i = 0; i < subCheckbox.length; i++) {
subCheckbox[i].checked = false;
}
}
}, false);
//绑定sub checkbox的事件
for (var i = 0; i < subCheckbox.length; i++) {
subCheckbox[i].addEventListener('change', function () {
var checkboxnum = subCheckbox.length;
var checked = document.querySelectorAll('[name=sub-checkbox]:checked').length;
if (checkboxnum == checked) { //如果选中的sub checkbox与全部的sub checkbox一样多,则勾选全选的checkbox
checkAll.checked = true;
} else { //反之取消勾选
checkAll.checked = false;
}
}, false);
}
</script>
</body>
</html>
jquery(需引入jquery):
思路都是一样的,给总复选框绑定事件实现全选反选功能;给子复选框绑定事件,当所有的子复选框都选中时总复选框勾选,当有一个子复选框被取消勾选时,总复选框取消勾选,这个功能是通过比较被选中子复选框数量跟所有子复选框数量来实现的。
需要注意的是jquery中获取checkbox勾选状态时用prop(),不用attr()。
绑定事件 由于querySelectorAll()返回的是一个NodeList,所以要写个循环一个节点一个节点绑定。
原生js:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>checkbox</title>
</head>
<body>
<div id="check-all">
<input type="checkbox" name="check-all">全选
</div>
<div id="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
<input type="checkbox" name="sub-checkbox">
</div>
<script>
var checkAll = document.querySelector('[name=check-all]');
var subCheckbox = document.querySelectorAll('[name=sub-checkbox]');
//绑定全选、反选事件
checkAll.addEventListener('change', function () {
if (this.checked) {
for (var i = 0; i < subCheckbox.length; i++) {
subCheckbox[i].checked = true;
}
} else {
for (var i = 0; i < subCheckbox.length; i++) {
subCheckbox[i].checked = false;
}
}
}, false);
//绑定sub checkbox的事件
for (var i = 0; i < subCheckbox.length; i++) {
subCheckbox[i].addEventListener('change', function () {
var checkboxnum = subCheckbox.length;
var checked = document.querySelectorAll('[name=sub-checkbox]:checked').length;
if (checkboxnum == checked) { //如果选中的sub checkbox与全部的sub checkbox一样多,则勾选全选的checkbox
checkAll.checked = true;
} else { //反之取消勾选
checkAll.checked = false;
}
}, false);
}
</script>
</body>
</html>
jquery(需引入jquery):
$(document).ready(function () { //checkbox select all $(document).on('change', '[name=check-all]', function () { if ($(this).prop('checked')) { $('[name=sub-checkbox]').prop('checked', true); } else { $('[name=sub-checkbox]').prop('checked', false); } }); //sub checkbox $(document).on('change', '[name=sub-checkbox]', function () { var checkboxnum = $('[name=sub-checkbox]').length; var checked = $('[name=sub-checkbox]:checked').length; if (checkboxnum == checked) { $('[name=check-all]').prop('checked', true); } else { $('[name=check-all]').prop('checked', false); } }); });
思路都是一样的,给总复选框绑定事件实现全选反选功能;给子复选框绑定事件,当所有的子复选框都选中时总复选框勾选,当有一个子复选框被取消勾选时,总复选框取消勾选,这个功能是通过比较被选中子复选框数量跟所有子复选框数量来实现的。
需要注意的是jquery中获取checkbox勾选状态时用prop(),不用attr()。
绑定事件 由于querySelectorAll()返回的是一个NodeList,所以要写个循环一个节点一个节点绑定。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 在Windows 8.1的IE 11中屏蔽双击放大功能
- 最后一次说说闭包
- Ajax
- HTML5调用摄像头实例
- 2019年开发人员应该学习的8个JavaScript框架
- Powershell 创建炫丽美观的Html报表
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 设计模式---状态模式在web前端中的应用
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)