jquery 当所有子复选框都被选中时,如何选中父

k10s72fa  于 2023-01-25  发布在  jQuery
关注(0)|答案(2)|浏览(162)

我的HTML结构与SO上类似的其他问题相当不同。我想在选中所有子复选框时选中父复选框。我有一个JSFiddle,在其中添加了我相当长的HTML代码。我在Jquery中做错了什么?这是我的jquery:

$('li :checkbox').on('click', function() {
      var $chk = $(this),
        $container = $chk.closest('td,li');
      if (!$container.hasClass('list-group-item')) {
        $container.find(':checkbox').not(this).prop('checked', this.checked)
      }
      do{
        $ul = $container.parent();
        $parent = $ul.siblings(':checkbox');
        if($chk.is(':checked')){
            $parent.prop('checked', $ul.has(':checkbox:not(:checked)').length == 0)
        } else {
            $parent.prop('checked', false)
        }
        $chk = $parent;
        $container = $chk.closest('td,li');
    } while($ul.is(':not(.someclass)'));
    });

PS:HTML结构下半部分的父/子关系由于一些未闭合的标签而不能很好地工作。但是前几个父/子关系是工作的

wpx232ag

wpx232ag1#

下面的例子应该能帮助你理解并给你一个方法来完成你想要的。

    • 说明**

您应该做的是给每个子类别一个ID,它可以用来迭代子类别,这样只有那些复选框可以被选中,而不是所有的。

    • 超文本标记语言**
<ul>
  <li>
    <input type="checkbox" id="test-main"> test
  </li>
  <ul id="test-sub-items">
    <li>
      <input type="checkbox"> test
    </li>
    <li>
      <input type="checkbox"> Something
    </li>
    <li>
      <input type="checkbox"> Another Thing</li>
  </ul>

  <li>
    <input type="checkbox"> Blah
  </li>
  <li>
    <input type="checkbox"> blah
  </li>
</ul>
    • 脚本语言**
var parent = document.getElementById('test-sub-items'),
  parentCheckbox = document.getElementById('test-main');

parentCheckbox.addEventListener('click', function () {
  for (var i = 0; i < parent.children.length; i++) {
    if (parentCheckbox.checked == true)
      parent.children[i].firstElementChild.checked = true;
    else
      parent.children[i].firstElementChild.checked = false;

  }
});

这只是一个示例,您可以尝试将其合并到代码中。

    • 更新**

看了你的评论后,我很快想出了这个函数,应该会有所帮助:

function areAllChecked() 
{
  for (var i = 0; i < parent.children.length; i++) {
    if (parentCheckbox.checked == false)
      return false;
  }
  return true;
}

检查实时示例中的控制台以获取更新版本。

    • 实时示例**

JSFiddle
JSFiddle (Update 1)

    • 阅读材料**

children
firstElementChild

wgeznvg7

wgeznvg72#

因为我没有找到任何其他地方的方法,我尝试了@Script47的例子试错,并得到了它的工作:

var child = document.getElementById('test-sub-items'), parentCheckbox = document.getElementById('test-main');

    child.addEventListener('click', function() {
      for (var i = 0; i < child.children.length; i++) {
        if (child.children[i].firstElementChild.checked == true)
          parentCheckbox.checked = true;
        else
          parentCheckbox.checked = false;

      }
    });
<ul>
<li>
<input type="checkbox" id="test-main"> Essen
</li>
    <ul id="test-sub-items">
      <li><input type="checkbox"> Apfel</li>
      <li><input type="checkbox"> Birne </li>
      <li><input type="checkbox"> Cadmium</li>
    </ul>

<li><input type="checkbox">Bier</li>
<li><input type="checkbox">C hohes</li>
</ul>

相关问题