开发者社区> 问答> 正文

如果所有子复选框都被取消选中,如何取消选中父复选框,反之亦然?

已解决

我用列表中的div做这个是因为我使用的模板需要那个类的复选框。我使用了父函数。这是我遇到的第三个问题。是因为我使用的div吗?如果最后一个孩子被选中,也要选中父复选框。请提供帮助

$('input[type=checkbox]').click(function() {
  if (this.checked) {
    $(this).parents().parents().children('input[type=checkbox]').prop('checked', true);
    $(this).parent().parent().parent().parent().children('div').first('div').children('input[type=checkbox]').attr('checked', true);
  }
  $(this).parent().parent().find('input[type=checkbox]').prop('checked', this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="col-sm-offset-2 col-sm-10">
  <ul class="list-unstyled">
    <li>
      <div class="checkbox">
        <input id="1" type="checkbox" class="checkbox">
        <label for="1">Dashboard</label>
      </div>
    </li>
    <li class="has_sub">
      <div class="checkbox">
        <input id="4" type="checkbox" class="parent">
        <label for="4">Customer</label>
      </div>
      <ul class="list-unstyled">
        <li>
          <div class="checkbox" style="margin-left: 25px;">
            <input id="4.11" type="checkbox" class="child1Gen">
            <label for="4.11">Customer List</label>
          </div>
        </li>
        <li>
          <div class="checkbox" style="margin-left: 25px;">
            <input id="4.12" type="checkbox" class="child1Gen">
            <label for="4.12">Add Customer</label>
          </div>
        </li>
      </ul>
    </li>
    <li class="has_sub">
      <div class="checkbox">
        <input id="5" type="checkbox" class="parent">
        <label for="5">Example</label>
      </div>
      <ul class="list-unstyled">
        <li>
          <div class="checkbox" style="margin-left: 25px;">
            <input id="5.1" type="checkbox" class="child1Gen">
            <label for="5.1">Example1</label>
          </div>
        </li>
        <li>
          <div class="checkbox" style="margin-left: 25px;">
            <input id="5.4" type="checkbox" class="child1Gen">
            <label for="5.4">Example2</label>
          </div>
        </li>
        <li class="has_sub">
          <div class="checkbox" style="margin-left: 25px;">
            <input id="5.5" type="checkbox" class="child1Gen">
            <label for="5.5">Example3</label>
          </div>
          <ul class="list-unstyled">
            <li>
              <div class="checkbox" style="margin-left: 50px;">
                <input id="5.5.1" type="checkbox" class="child2Gen">
                <label for="5.5.1">Example3Sub1</label>
              </div>
            </li>
            <li>
              <div class="checkbox" style="margin-left: 50px;">
                <input id="5.5.2" type="checkbox" class="child2Gen">
                <label for="5.5.2">Example3Sub2</label>
              </div>
            </li>
            <li>
              <div class="checkbox" style="margin-left: 50px;">
                <input id="5.5.3" type="checkbox" class="child2Gen">
                <label for="5.5.3">Example3Sub3</label>
              </div>
            </li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</div>

展开
收起
sossssss 2019-12-09 17:19:40 2699 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    尝试change事件 演示

    $('input[type=checkbox]').change(function() {
      // For child cb
      let $this = $(this)
    
      $this.parents('li:first').find('ul input[type=checkbox]').prop('checked', this.checked)
    
      // For parent cb
      let $siblings = $this.parents('ul:first').children('li')
      let $checked = $siblings.find('input[type=checkbox]:checked')
      let $checkbox = $siblings.find('input[type=checkbox]')
    
      $this.parents('ul:first').siblings('div.checkbox').find('input[type=checkbox]').prop('checked', $checked.length === $checkbox.length)
    });
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div class="col-sm-offset-2 col-sm-10">
      <ul class="list-unstyled">
        <li>
          <div class="checkbox">
            <input id="1" type="checkbox" class="checkbox">
            <label for="1">Dashboard</label>
          </div>
        </li>
        <li class="has_sub">
          <div class="checkbox">
            <input id="4" type="checkbox" class="parent">
            <label for="4">Customer</label>
          </div>
          <ul class="list-unstyled">
            <li>
              <div class="checkbox" style="margin-left: 25px;">
                <input id="4.11" type="checkbox" class="child1Gen">
                <label for="4.11">Customer List</label>
              </div>
            </li>
            <li>
              <div class="checkbox" style="margin-left: 25px;">
                <input id="4.12" type="checkbox" class="child1Gen">
                <label for="4.12">Add Customer</label>
              </div>
            </li>
          </ul>
        </li>
        <li class="has_sub">
          <div class="checkbox">
            <input id="5" type="checkbox" class="parent">
            <label for="5">Example</label>
          </div>
          <ul class="list-unstyled">
            <li>
              <div class="checkbox" style="margin-left: 25px;">
                <input id="5.1" type="checkbox" class="child1Gen">
                <label for="5.1">Example1</label>
              </div>
            </li>
            <li>
              <div class="checkbox" style="margin-left: 25px;">
                <input id="5.4" type="checkbox" class="child1Gen">
                <label for="5.4">Example2</label>
              </div>
            </li>
            <li class="has_sub">
              <div class="checkbox" style="margin-left: 25px;">
                <input id="5.5" type="checkbox" class="child1Gen">
                <label for="5.5">Example3</label>
              </div>
              <ul class="list-unstyled">
                <li>
                  <div class="checkbox" style="margin-left: 50px;">
                    <input id="5.5.1" type="checkbox" class="child2Gen">
                    <label for="5.5.1">Example3Sub1</label>
                  </div>
                </li>
                <li>
                  <div class="checkbox" style="margin-left: 50px;">
                    <input id="5.5.2" type="checkbox" class="child2Gen">
                    <label for="5.5.2">Example3Sub2</label>
                  </div>
                </li>
                <li>
                  <div class="checkbox" style="margin-left: 50px;">
                    <input id="5.5.3" type="checkbox" class="child2Gen">
                    <label for="5.5.3">Example3Sub3</label>
                  </div>
                </li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </div>
    

    对于中间复选框 https://stackoverflow.com/a/56600257/8053274

    2019-12-09 17:22:00
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载