<script>
var checkParent = function(ref) {
return $(ref).parent().parent().parent().children().first();
}
$('input[type="checkbox"]').click(function(){
if(this.checked){
$(this).parent().children().find('input[type="checkbox"]').attr('checked', true);
}
else {
var a = checkParent(this);
while(a.length > 0 && a.prop("tagName") == "INPUT" )
{
a.attr("checked", false);
a = checkParent(a);
}
}
});
</script>
Только что завершил этот алгоритм для проекта и подумал, что я поделюсь им с потоком стека
По сути, если вы проверяете родителя, все дочерние элементы выбираются, а когда вы снимаете флажок дочернего,связанные с ним родители будут не проверены, потому что родитель может оставаться отмеченным, только если отмечены все дочерние элементы
Убедитесь, что все флажки находятся в пределах li и все li находятся в пределах ul, иначе это не будет работать
образец HTML
<ul id="a">
<ul id="b">
<li id="parentli"><input type="checkbox" id="parent"> Parent
<ul id="c">
<li><input type="checkbox" id="aa">Child 1</li>
<li><input type="checkbox" id="ab">Child 2
<ul id="d">
<li><input type="checkbox" id="aba">Child 2-1</li>
</ul>
</li>
<li><input type="checkbox" id="ac">Child 3</li>
</ul>
</li>
</ul>
</ul>