【问题标题】:how to uncheck parent checkbox if all children checkbox is uncheck and vice versa?如果所有子复选框都未选中,如何取消选中父复选框,反之亦然?
【发布时间】:2019-12-09 05:33:44
【问题描述】:

如果所有子复选框都被选中,如何检查父复选框,反之亦然? 我正在使用列表中的 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>

【问题讨论】:

    标签: javascript jquery list checkbox


    【解决方案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

    【讨论】:

    • 在选中任何子复选框时,未选中父复选框和祖父复选框。
    • @SovitMaharjan 如果至少选中了一个孩子,是否要选中父复选框?
    • 看来您已经按照书面形式回答了问题(“如果所有子复选框都选中,请检查父复选框”)
    • @SovitMaharjan 你在哪里提到过这个问题?
    • 真的很抱歉
    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多