“21天好习惯“第二十一期—21之表单全选与反选

JS部分有注释 公知
先看一下效果图:
在这里插入图片描述
大体分析思路:
①全部点击全选框得有√,那就每点击一遍循环查询框一遍。同样的,点击全选框全选和反选全部框,先绑定再循环执行,具体注释在JS部分

②只要一个没√全选框就没√,同上,循环检测到没√就不给全选框打√

③一些易出的bug,全选框打√再给某一框打√显示会错误,解决办法就是将全选框全选代码提前,详情看JS部分

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			table {
				text-align: center;

			}

			tr th {
				background-color: #3c60ff;
			}
		</style>
	</head>
	<body>
		<table border="1" cellspacing="0" cellpadding="20" align="center">
			<thead>
				<tr>
					<th><input type="checkbox" id="th_checkbox" /></th>
					<th>Bilibili</th>
					<th>动画</th>
					<th>数据</th>
					<th>收益</th>
				</tr>
			</thead>
			<tbody id="tb_checkbox">
				<tr>
					<td><input type="checkbox" /></td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
				</tr>
				<tr>
					<td><input type="checkbox" /></td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
				</tr>
				<tr>
					<td><input type="checkbox" /></td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
				</tr>
				<tr>
					<td><input type="checkbox" /></td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
				</tr>
				<tr>
					<td><input type="checkbox" /></td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
					<td>Data</td>
				</tr>
			</tbody>
		</table>
		<script type="text/javascript">
			// 1.全选按钮点击全选或反选
			var th_checkbox = document.getElementById('th_checkbox');
			var tb_checkboxs = document.getElementById('tb_checkbox').getElementsByTagName('input');
			th_checkbox.onclick = function() {
				for (var i = 0; i < tb_checkboxs.length; i++) {
					tb_checkboxs[i].checked = this.checked;
				}
			}
			// 2.下面复选框需要全部选中,上面复选框才选中,及有未选中的取消上面复选框选中状态
			// 给每个checkboxs绑定事件

			//方法一
			// for (var i = 0; i < tb_checkboxs.length; i++) {
			// 	tb_checkboxs[i].onclick = function() {
			// 		// 循环判断checkboxs是否有未选中
			// 		flag = true;
			// 		for (var i = 0; i < tb_checkboxs.length; i++) {
			// 			if (!tb_checkboxs[i].checked)
			// 				flag = false;
			//				break;
			// 		}
			// 		th_checkbox.checked = flag;
			// 	}
			// }

			// 方法二
			for (var i = 0; i < tb_checkboxs.length; i++) {
				tb_checkboxs[i].onclick = function() {
					count = 0;
					for (var i = 0; i < tb_checkboxs.length; i++) {
						if (tb_checkboxs[i].checked) {
							count++;
						}
					}
					count == tb_checkboxs.length?th_checkbox.checked = 'checked':th_checkbox.checked = '';
					// if (count == tb_checkboxs.length)
					// 	th_checkbox.checked = 'checked';
					// else 
					// 	th_checkbox.checked = '';
				}
			}
		</script>
	</body>
</html>

本次案例没啥总结的,就是debug很烦,要理清楚每层for循环的用处,是用来绑定事件的还是用来排他或者是单纯一个小循环可爱…总之看代码即便加了注释也很理清关系,还是建议去看黑马系列课程,本项目就来自黑马JS系列课程的表单全反选。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值