js实现checkbox组 全选和取消全选

  做后台管理程序时,用到一个checkbox组的全选和取消全选的功能,

主要是逻辑上的坑,理清后大概是:

1.全选点击后,小弟1~4都要选上,点击取消,小弟们也要取消

2.只要有一个小弟取消时,全选要取消

3.当小弟都选上时,全选要选上

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>全选和取消全选</title>
</head>
<body>
    <h2>管理员列表</h2>
    <table border="1px" width="500px">
      <thead>
        <tr>
            <th><input type="checkbox"/>全选</th>
            <th>管理员ID</th>
            <th>姓名</th>
            <th>操作</th>
        </tr>
      </thead>
      <tbody>
          <tr>
              <td><input type="checkbox"/>小弟1</td>
              <td>1</td>
              <td>Tester</td>
              <td>修改 删除</td>
          </tr>
          <tr>
              <td><input type="checkbox"/>小弟2</td>
              <td>2</td>
              <td>Manager</td>
              <td>修改 删除</td>
          </tr>
          <tr>
              <td><input type="checkbox"/>小弟3</td>
              <td>3</td>
              <td>Analyst</td>
              <td>修改 删除</td>
          </tr>
          <tr>
              <td><input type="checkbox"/>小弟4</td>
              <td>4</td>
              <td>Admin</td>
              <td>修改 删除</td>
          </tr>
      </tbody>
    </table>
    <button>删除选定</button>
  <script>

        //查找thead下第一个th下的input
        var chbAll=document.querySelector(
            "thead th:first-child>input"
        );
        //查找tbody中所有第一个td下的input
        var chbs=document.querySelectorAll(
            "tbody td:first-child>input"
        );
        //为chbAll绑定单击事件
        chbAll.onclick=function(){
            //遍历chbs中每个chb
            for(var i=0;i<chbs.length;i++){
                //设置当前chb的checked等于this的checked
                chbs[i].checked=this.checked;
            }
        }
        //为chbs中每chb都绑定单击事件
        for(var i=0;i<chbs.length;i++){
            chbs[i].onclick=function(){
                if(!this.checked)
                    chbAll.checked=false;
                else{
                    //选择tbody下第一个td中的未选中的input
                    var unchecked=
                        document.querySelector(
                            "tbody td:first-child>input:not(:checked)"
                        );
                    if(unchecked===null)
                        chbAll.checked=true;
                }
            }
        }
    </script>
</body>
</html>

 

转载于:https://www.cnblogs.com/web-fusheng/p/6735432.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值