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

一、需求:

  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);
        });
    }
};
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值