【JS实例】利用复选框实现全选、全不选和相应的反作用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44591035/article/details/97398818

一、需求:

  1. 全选: 点击全选,所有选项被选中;
  2. 全不选:全选情况下再次点击全选框,所有选项都不选;
  3. 相应的反作用:
    a. 全选情况下,取消某一个至全部子选项,全选框也变为不选中;
    b. 没有选中全选的情况下,选中了所有子选项,全选框自动选中。

二、最终实现:

0、原则

朝着 “高内聚,低耦合” 原则前进,终于改到自己不会再改的地步了。由于元素的事件属性也是在JS文件添加的,算是实现了HTML文件的零JS代码污染。并且代码也精简到自己没能力再精简的地步了。废话少说,最终的代码如下:

1、HTML源码:

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>复选框练习</title>
    <script src="js/checkbox.js"></script>    
</head>
<body>
    <fieldset>
        <legend>您喜欢的汽车:</legend>
        <label><input type="checkbox" name="car" value="baoma">宝马</label>
        <label><input type="checkbox" name="car" value="benchi">奔驰</label>
        <label><input type="checkbox" name="car" value="dazhong">大众</label>
        <label><input type="checkbox" name="car" value="xiandai">现代</label>
    </fieldset>
    <label><input id="ctrlAll" type="checkbox">全选</label>
</body>

2、JS源码:

// 实现一个复选框控制一系列复选框的全选与全不选,以及反作用。
onload = function () {
    var all = document.getElementById("ctrlAll");
    var checkboxList=document.getElementsByName("car");
    var checkedNum = 0;  // 选中的子选项个数
    
    // 给全选框添加事件:使全选框可以控制全选和全不选。
    all.addEventListener("click", function(){
        for (let i=0;i<checkboxList.length;i++) {
            checkboxList[i].checked = all.checked;
        }
        //全选,checkedNum等于子选项的总数
        //全不选,checkedNum等于0
        checkedNum = all.checked * checkboxList.length;
    });
    
    // 添加事件:鼠标点击某个子选项时,检查和修正全选框。
    for (let i=0;i<checkboxList.length;i++) {
        checkboxList[i].addEventListener("click", function(){
            checkboxList[i].checked ? ++checkedNum : --checkedNum;
            all.checked = (checkedNum == checkboxList.length);
        });
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44591035/article/details/97398818