html checkbox 实现全选/取消全选效果

在前端开发的过程中,特别是数据表格的处理,我们经常碰到checkbox全选与取消以及动态的根据子类的选中状态确定全选checkbox是否“checked”

全选与取消全选

<html>
<body>
 
	<table border="1">
		<tr>
			<th><input type="checkbox" onclick="swapCheck()" /></th>
			<th>Month</th>
			<th>Savings</th>
		</tr>
		<tr>
			<td><input type="checkbox" /></td>
			<td>January</td>
			<td>$100</td>
		</tr>
		<tr>
			<td><input type="checkbox" /></td>
			<td>February</td>
			<td>$150</td>
		</tr>
	</table>
 
	<script type="text/javascript"
		src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
 
	<script type="text/javascript">
		//checkbox 全选/取消全选
		var isCheckAll = false;
		function swapCheck() {
			if (isCheckAll) {
				$("input[type='checkbox']").each(function() {
					this.checked = false;
				});
				isCheckAll = false;
			} else {
				$("input[type='checkbox']").each(function() {
					this.checked = true;
				});
				isCheckAll = true;
			}
		}
	</script>
       //优化版本
     <script type="text/javascript">
		var isCheckAll = false;
		function swapCheck() {
			$("input[type='checkbox']").each(function() {
				this.checked = !isCheckAll;
			});
		    isCheckAll = !isCheckAll;
		}

	</script>
</body>
</html>

还要满足两个常用场景:

当然我们实现这个功能还是不够的,考虑以下2个常用场景,

场景1:如果用户在全选完之后,把部分行数据“取消”了选中;
场景2:用户通过手动点击行内的checkbox最终实现了“全选”的状态

通过前端实现

js代码:

<script type="text/javascript">
	function listenCheckbox(){
        $("tr td input[type='checkbox']").on('change',function(){
            //总量
            var total=$("tr td input[type='checkbox']").length;
            ////实际被选中的
            var exact=$("tr td input[type='checkbox']:checked").length;
            ////检测所有的check选项的有多少与总量进行对比
            $("tr th input[type='checkbox']")[0].checked=(total==exact); //true or false
        })
		}
	listenCheckbox()
</script>
posted @ 2020-05-27 16:17  hanfe1  阅读(1948)  评论(1编辑  收藏  举报