先来看看效果

实现原理
checked属性:true和false,前者为选中后者为没有选中
- 全选框状态和所有的复选框的父元素状态一致,所以结构上让全选框和所有的复选框的父元素同级
- 复选框只要有一个没有被选中全选框就不能被选中,
for循环实现所有复选框点击事件以及所有复选框是否被选中的检查事件。
上代码
<div class="wrap">
<table>
<thead>
<tr>
<th>
<input type="checkbox" id="shopcar" />
</th>
<th>购物车</th>
</tr>
</thead>
<tbody id="shopnames">
<tr>
<td>
<input type="checkbox" />
</td>
<td>鞋袜</td>
</tr>
<tr>
<td>
<input type="checkbox" />
</td>
<td>外套/棉服</td>
</tr>
<tr>
<td>
<input type="checkbox" />
</td>
<td>裤子</td>
</tr>
<tr>
<td>
<input type="checkbox" />
</td>
<td>T-shirt</td>
</tr>
</tbody>
</table>
</div>
* {
padding: 0;
margin: 0;
}
.wrap {
width: 500px;
margin: 100px auto;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #413f3f;
width: 500px;
}
th,
td {
border: 1px solid #d0d0d0;
color: #404060;
padding: 10px;
}
th {
background-color: #09c;
font: bold 24px "微软雅黑";
color: #fff;
}
td {
font: 20px "微软雅黑";
}
tbody tr {
background-color: #f0f0f0;
text-align: center;
}
tbody tr:hover {
cursor: pointer;
background-color: #fafafa;
}
var shopcar = document.getElementById("shopcar")
var shopnames = document.querySelectorAll("#shopnames input")
shopcar.onclick = function () {
for (var i = 0; i < shopnames.length; i++) {
shopnames[i].checked = this.checked;
}
}
for (var j = 0; j < shopnames.length; j++) {
shopnames[j].onclick = function () {
var flag = true;
for (var i = 0; i < shopnames.length; i++) {
if (!shopnames[i].checked) {
flag = false;
}
}
shopcar.checked = flag;
}
}