JavaScript 实现全选、不全选、反选功能(有详细注释)

JavaScript 实现全选、不全选、反选功能

一、我们需要考虑的点

  1. 获取元素对象(DOM查询)
  2. 判断哪些checkbox被选择(checkboxObject.checked)
  3. 全选时将所有选项都选上(设置judAllOrNot变量用于判断选择个数)
  4. 不全选时将所有选项撤销
  5. 反选时如何实现(checkboxObject.checked = ! checkboxObject.checked)
  6. 点击每一小项时判断是否已经被全选或全不选(全选:judAllOrNot === 0,全不选:judAllOrNot === inputs.length)
  7. 反选时判断是否全选或不全选(judAllOrNot = inputs.length - judAllOrNot)

二、代码实现

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div>
    <p>你喜欢的水果是?</p>
    <div>
      <input type="checkbox" id="allOrNot"/>全选 or 全不选
    </div>
    <div>
      <input type="checkbox" name="items" value="苹果"/>苹果
      <input type="checkbox" name="items" value="橙子"/>橙子
      <input type="checkbox" name="items" value="李子"/>李子
      <input type="checkbox" name="items" value="香蕉"/>香蕉
    </div>
    <div>
      <button id="btn1">全选</button>
      <button id="btn2">全不选</button>
      <button id="btn3">反选</button>
      <button id="btn4">提交</button>
    </div>
  </div>

  <script>
    var inputs = document.getElementsByName("items"); // 获取四个水果选项到inputs数组
    var judAllOrNot = 0;  // 用于记录被选中的个数,方便判断是否全选与否
    for(var i = 0; i < inputs.length; i++) {
      inputs[i].onclick = function() {  // 给所有checkbox都设置onclick事件
        if(this.checked) {  // 当前checkbox被选中则judAllOrNot加一个。
          judAllOrNot++;
        } else {  // 当前checkbox被撤销选中则judAllOrNot减一个。
          judAllOrNot--;
        }
        if(judAllOrNot === inputs.length) { // 选中的个数和可选个数相同
          allOrNot.checked = true;
        } else {  // 选中的个数和可选个数不相同
          allOrNot.checked = false;
        }
      }
    };

    var allOrNot = document.getElementById("allOrNot"); // 全选or不全选
    allOrNot.onclick = function() { // 给全选or不全选checkbox设置onclick事件
      for(var i = 0; i < inputs.length; i++) {
        inputs[i].checked = this.checked; // 所有选项都选上
      }
    };

    var btn1 = document.getElementById("btn1"); // 全选button
    btn1.onclick = function() {
      allOrNot.checked = true;  // 全选or不全选checkbox选上
      for(var i = 0; i < inputs.length; i++) {
        inputs[i].checked = true;  // 全都选上
      }
    };

    var btn2 = document.getElementById("btn2"); // 不全选button
    btn2.onclick = function() {
      allOrNot.checked = false; // 全选or不全选checkbox撤销选择
      for(var i = 0; i < inputs.length; i++) {
        inputs[i].checked = false;  // 全不选
      }
    };

    var btn3 = document.getElementById("btn3"); // 反选button
    btn3.onclick = function() {
      judAllOrNot = inputs.length - judAllOrNot;  // 判断选择个数反转
      if(judAllOrNot === 0) { // 特判是否没有一个选项被选
        allOrNot.checked = false; // 将全选or不全选checkbox撤销选择
      }
      if(judAllOrNot === inputs.length) { // 特判是否全选
        allOrNot.checked = true;  // 将全选or不全选checkbox选上
      }
      for(var i = 0; i < inputs.length; i++) {
        inputs[i].checked = !inputs[i].checked; // 所有选项反转
      }
    };

    var btn4 = document.getElementById("btn4"); // 提交button
    btn4.onclick = function() {
      var str = ""; // 存放待会儿要显示的文字
      for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].checked) { // 提取被选中的项的value值
          str += inputs[i].value + "   ";
        }
      }
      alert(str); // 通过alert()方法显示给用户
    };
  </script>
</body>
</html>

三、一点备注

直接粘贴代码到html文件中即可运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值