I am developing an application that requires the value of multiple checkboxes. I have nested lists containing checkboxes. The current functionality is this:
I need to add this functionality:
When a child is unchecked after the parent is checked, the parent unchecks, but leaves the children checked.
$('input[name="level-1"],input[name="level-2"]').bind('click', function () {
$('input[type=checkbox]', $(this).parent('li')).attr('checked', ($(this).is(':checked')));
});
My code is found here: http://jsfiddle.net/dbcottam/Py4UN/
A possible solution
Add a class someclass
to the topmost ul
element then
$('.someclass :checkbox').bind('click', function () {
var $chk = $(this), $li = $chk.closest('li'), $ul, $parent ;
if($li.has('ul')){
$li.find(':checkbox').not(this).prop('checked', this.checked)
}
do{
$ul = $li.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;
$li = $chk.closest('li');
} while($ul.is(':not(.someclass)'));
});
Demo: Fiddle