全选框案例:
先看效果图:
核心思路如下:
- 全选点击事件: 单选checked状态跟随全选
- 单选for循环点击事件: 默认flag = ture;只要有一个按钮没选中,flag = false 即 全选框就不勾选
scirpt核心代码如下:
//全选点击事件,单选跟随全选
allCheck.onclick = function () {
for (var i = 0; i < oneChecks.length; i++) {
oneChecks[i].checked = this.checked;
}
}
//单选按钮循环注册点击事件
for (var i = 0; i < oneChecks.length; i++) {
oneChecks[i].onclick = function () {
//
var flag = true;
//遍历按钮,只要有一个按钮没选中,全选框就不勾选
for (var i = 0; i < oneChecks.length; i++) {
if (!oneChecks[i].checked) {
flag = false;
}
}
//
allCheck.checked = flag;
}
}
全部代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
table {
margin-top: 100px;
}
table thead {
background-color: cornflowerblue;
}
table tbody {
background-color: whitesmoke;
cursor: pointer;
}
.bg {
background-color: #a7cbff;
}
</style>
</head>
<body>
<table align="center" border="0" width="300px" height="200px" cellspacing="1">
<thead align="center">
<tr>
<td><label><input id="a_All" class="checkAll" type="checkbox"/>全选</label></td>
<th>手机款式</th>
<th>单价</th>
</tr>
</thead>
<tbody align="center">
<tr>
<td><input class="checkOne" type="checkbox" name="phone"></td>
<td>iPhone 8</td>
<td>¥ 2000</td>
</tr>
<tr>
<td><input class="checkOne" type="checkbox" name="phone"></td>
<td>iPhone X</td>
<td>¥ 4000</td>
</tr>
<tr>
<td><input class="checkOne" type="checkbox" name="phone"></td>
<td>iPhone 11</td>
<td>¥ 5000</td>
</tr>
<tr>
<td><input class="checkOne" type="checkbox" name="phone"></td>
<td>iPhone 12</td>
<td>¥ 6000</td>
</tr>
</tbody>
</table>
<script>
var allCheck = document.getElementById('a_All');
var oneChecks = document.querySelector('tbody').querySelectorAll('input');
var trs = document.querySelector('tbody').querySelectorAll('tr');
//全选点击事件,单选跟随全选
allCheck.onclick = function () {
for (var i = 0; i < oneChecks.length; i++) {
oneChecks[i].checked = this.checked;
}
}
//单选按钮循环注册点击事件
for (var i = 0; i < oneChecks.length; i++) {
oneChecks[i].onclick = function () {
//
var flag = true;
//遍历按钮,只要有一个按钮没选中,全选框就不勾选
for (var i = 0; i < oneChecks.length; i++) {
if (!oneChecks[i].checked) {
flag = false;
}
}
//
allCheck.checked = flag;
}
}
//循环注册鼠标事件 划过变色
for (var i = 0; i < trs.length; i++) {
trs[i].onmouseover = function () {
this.className = 'bg';
}
trs[i].onmouseout = function () {
this.className = '';
}
}
</script>
</body>
</html>