js--checked的全选,反选 ,点击子的checkbox改变父的checkbox状态

Posted 安文静

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js--checked的全选,反选 ,点击子的checkbox改变父的checkbox状态相关的知识,希望对你有一定的参考价值。

下面是我通过学习js基础利用js简单的实现了一个小的案例包含具体的思路和代码,这里的表格没有写css样式美化。

点击父的checkbox时呈现的状态

当子的checkbox没有全部选中时,父的checkbox也改变了相应的状态

点击反选之后呈现的状态

 

具体代码如下:其中有一个封装的方法,为了避免代码冗余。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div class="warp">
        <table border="1">
            <thead>
                <tr>
                    <th><input type="checkbox" id="j_cbAll" /></th>
                    <th>商品</th>
                    <th>价钱</th>
                </tr>
               
            </thead>
            <tbody id="j_tb">
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>iPhone8</td>
                    <td>8000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>iPad pro</td>
                    <td>5000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>iPhone11</td>
                    <td>10000</td>
                </tr>
            </tbody>
        </table>
        <input type="button" value="反选" id="btn">
    </div>
    <script src="common.js"></script>
   <script>
       // 1 点击全选按钮(父的checkbox)的时候,让子的checkbox的选中状态跟父的checkbox保持一致
             //1.1 获取父checkbox注册点击事件
           var j_cbAll = my$(\'j_cbAll\');
           var checkboxs = document.querySelectorAll(\'#j_tb input[type=checkbox]\');
           j_cbAll.onclick = function () {
             //2.2 让子的checkbox的选中状态跟父的checkbox保持一致
            //获取所有子的checkbox
             var i = 0, len=checkboxs.length;
             for (; i<len; i++) {
                 //获取每一个checkbox
                 var checkbox = checkboxs[i];
                 //让每一个checkbox的选中状态和父的checkbox保持一致
                 checkbox.checked = this.checked;
             }

           }
           
       // 2 给所有子checkbox注册点击事件,点击子checkbox修改父的checkbox 如果有一个子的checkbox没有选中,父的checkbox也不能选中
       // 2.1 给所有的checkbox注册点击事件
       

        var i = 0, len=checkboxs.length;
        for (; i<len; i++) {
            var checkbox =checkboxs[i];
            //注册点击事件
            checkbox.onclick = function () {
                //2.2 如果有一个子checkbox没有选中,父的checkbox也选不中
                // 假设,所有子的checkbox都选中了
                singleChecked();
             
            }
        }
        //封装方法
       function singleChecked () {
          //2.2 如果有一个子checkbox没有选中,父的checkbox也选不中
                // 假设,所有子的checkbox都选中了
                var i = 0, len=checkboxs.length;
                var isAllCheked = true;
                for (i = 0; i<len; i++) {
                    //获取每一个子的checkbox
                    checkbox = checkboxs[i];
                    //判断选中状态
                    if(!checkbox.checked)
                    {
                        //如果checkbox没有选中 设置isAllChecked = false
                        isAllCheked = false;
                        break;
                    }
                }
                // 设置父的checkbox的选中状态
                j_cbAll.checked = isAllCheked;
       }
       // 3 反选
       // 3.1 给反选按钮注册点击事件
       my$(\'btn\').onclick = function () {
           // 3.2 给所有子的checkbox 对选中状态进行反选
           for(i = 0; i<len; i++) {
               var checkbox = checkboxs[i];
               //反选
                checkbox.checked = !checkbox.checked;
                singleChecked();
                
           }
       }
       
   </script> 
</body>
</html>

以上是关于js--checked的全选,反选 ,点击子的checkbox改变父的checkbox状态的主要内容,如果未能解决你的问题,请参考以下文章

js 脚本怎样实现checkbox的全选,反选,类似邮箱中邮件的全选后删除移动

如何实现复选框的全选和取消全选效果

数据列表的全选反选以及批量操作

关于checkbox全选与反选的问题

特效复选框的全选全不选反选操作

jQuery 实现复选框的全选与反选