美文网首页
全选与反选

全选与反选

作者: 王远清orz | 来源:发表于2019-10-09 14:29 被阅读0次
<body>
  <table border="1" cellpadding="0" cellspacing="0" width="200" id="">
    <thead>
      <tr>
        <th><input type="checkbox" name="" id="allSelected"></th>
        <th>商品</th>
        <th>价格</th>
      </tr>
    </thead>
    <tbody id="j_tb">
      <tr>
        <td><input type="checkbox" name="1" id=""></td>
        <td>苹果</td>
        <td>2000</td>
      </tr>
      <tr>
        <td><input type="checkbox" name="2" id=""></td>
        <td>华为</td>
        <td>3000</td>
      </tr>
      <tr>
        <td><input type="checkbox" name="3" id=""></td>
        <td>小米</td>
        <td>4000</td>
      </tr>
      <tr>
        <td><input type="checkbox" name="4" id=""></td>
        <td>vivo</td>
        <td>5000</td>
      </tr>
    </tbody>
  </table>
  <input type="button" id="btnInvert" value="反选">
  <script type="text/javascript">
    // 1.给全选按钮注册点击事件
    var allSelected = document.getElementById('allSelected');
    var j_tb = document.getElementById('j_tb');
    var inputs = j_tb.getElementsByTagName('input');
    allSelected.onclick = function () {
      // 2.获取子复选框,并让其与父复选框保持一致
      for( var i = 0 ; i < inputs.length; i++ ){
        var input = inputs[i];
        if (input.type === "checkbox") {
          // 让子复选框的选中状态与父复选框状态一致
          input.checked = this.checked;
        }
      }
    }

    // 3.给子复选框点击事件,如果所有子复选框都是选择状态,则allSelected是选择,否则反之;

    // 给每个input注册点击事件
    for( var i = 0; i<inputs.length;i++){
      var input = inputs[i];
      if(input.type !== "checkbox"){
        continue;
      }
      input.onclick = function () {   //这里的input是最后一个,所以需要再找一遍所有子复选框
        checkAllChecked();
      }
    }

    // 设置父复选框的状态,封装成函数,方便调用
    function checkAllChecked() {
      var isAllChecked = true; //假设全部选择
      for (var i = 0; i < inputs.length; i++) {
        var input = inputs[i];
        if (input.type !== "checkbox") {
          continue;
        }
        //如果有任意一个input.checked返回false,则isAllChecked = false;
        if (!input.checked) {
          isAllChecked = false;
        }
        allSelected.checked = isAllChecked;
      }
    }

    // 4.给反选按钮注册点击事件
    var btnInvert = document.getElementById('btnInvert');
    btnInvert.onclick = function () {
      // 5.让子复选框选中的变成未选中,未选中的变成选中
      for( var i = 0; i < inputs.length; i++){
        input = inputs[i];
        if(input.type !== "checkbox"){
          continue;
        }
        input.checked = !input.checked;
      }
      //6.设置父复选框的选中状态
      checkAllChecked();
    }

  </script>
</body>

相关文章

网友评论

      本文标题:全选与反选

      本文链接:https://www.haomeiwen.com/subject/cchgpctx.html