复选框全部点击

时间:2014-03-21 18:17:53

标签: javascript

我想在点击任何一个孩子时选择父项。此代码正在检查并检查。

$(function() {
  $(".child").on("click",function() {
      $parent = $(this).prevAll(".parent");
      if ($(this).is(":checked")) $parent.prop("checked",true);
      else {
         var len = $(this).parent().find(".child:checked").length;
         $parent.prop("checked",len>0);
      }    
  });
  $(".parent").on("click",function() {
      $(this).parent().find(".child").prop("checked",this.checked);
  });
});

它正在使用输入(请参阅此link

<input type='checkbox' name='cat' class='parent' value='cat1' />Category 1<br>
<input type='checkbox' name='foo' class='child' value='1' />SubCategory 1<br>
<input type='checkbox' name='foo' class='child' value='1' />SubCategory 2

但是&lt; li>检查无效(请参阅此link

<input type='checkbox' name='cat' class='parent' value='cat1' />Category 1
<ul>
    <il><input type='checkbox' name='foo' class='child' value='1' />SubCategory 1</il>
    <il><input type='checkbox' name='foo' class='child' value='1' />SubCategory 2</il>
</ul>    

2 个答案:

答案 0 :(得分:0)

添加无序列表会添加另一层父子。编辑此行:

      $parent = $(this).parent().prevAll(".parent");

到此:

  $parent = $(this).parent().parent().prevAll(".parent");

正确指向您想要的父母。

答案 1 :(得分:0)

看了你的代码之后,我想出了一个我认为你正在寻找的解决方案。

通过使用自定义属性,如果选中了其中一​​个子复选框,则选中顶级复选框。如果选中至少一个子级别复选框,则父级别保持选中状态。否则,未经检查。这可能比导航DOM更容易,最终代码更少。

$(function() {
  $(".child").change(function() {
      if ($('.child[thisparent=' + $(this).attr('thisparent') + ']:checked').length == 0) {
          $('#' + $(this).attr('thisparent')).prop('checked', false);
      }
      else {
          $('#' + $(this).attr('thisparent')).prop('checked', true);
      }
  });
  $(".parent").change(function() {
      $('input[thisparent="' + $(this).attr('id') + '"]').prop('checked', $(this).prop('checked'));
  });
});

JSFiddle:here

另外,你的HTML无效。你的&#34; il&#34;标签应该是&#34; li&#34;