我对jquery或javascript并不熟悉,我需要快速解决我的问题,这就是我在这里发布的原因。以下是一个示例html代码段:
<ul>
<li><input type="checkbox" />Administration
<ul>
<li><input type="checkbox" />President
<ul>
<li><input type="checkbox" />Manager 1
<ul>
<li><input type="checkbox" />Assistant Manager 1</li>
<li><input type="checkbox" />Assistant Manager 2</li>
<li><input type="checkbox" />Assistant Manager 3</li>
</ul>
</li>
<li><input type="checkbox" />Manager 2</li>
<li><input type="checkbox" />Manager 3</li>
</ul>
</li>
<li><input type="checkbox" />Vice President
<ul>
<li><input type="checkbox" />Manager 4</li>
<li><input type="checkbox" />Manager 5</li>
<li><input type="checkbox" />Manager 6</li>
</ul>
</li>
</ul>
</li>
</ul>
我想要检查管理时检查所有内容。如果我取消选举总统,那么,他的父母也应该与他的子女一起不受管理,只留下副总统及其子女。 同样,如果我检查经理1,那么他的孩子也应该被检查。但如果我取消选中助理经理1,那么经理1也应该取消选中,只留下助理。经理2和3检查。
请注意,此列表是动态的。这意味着孩子可以有更多孩子等等。
提前致谢!
答案 0 :(得分:18)
请参阅: DEMO
$('li :checkbox').on('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)'));
});
答案 1 :(得分:0)
<thead>
<tr>
<th class="td10"><input type="checkbox" name="" value="" class="parentCheckBox"></th>
<th class="td15 invC">id</th>
<th class="td15 invC">Name</th>
</tr>
</thead>
<tbody>
<tr>
<tr>
<td class="td10"><input type="checkbox" class="childCheckBox" name="" value=""></td>
<td class="td15 invC">Id</td>
<td class="td15 invC">Name</td>
</tr>
</tbody>
$(document).ready(
function() {
$('input.childCheckBox').change(function() {
$(this).closest('table`enter code here`').find('.parentCheckBox').prop('checked',
$('input.childCheckBox').length === $('input.childCheckBox:checked').length
);
});
//clicking the parent checkbox should check or uncheck all child checkboxes
$(".parentCheckBox").click(
function() {
$(this).closest('table').find('.childCheckBox').prop('checked', this.checked);
}
);
//clicking the last unchecked or checked checkbox should check or uncheck the parent checkbox
$('.childCheckBox').click(
function() {
if ($(this).closest('table').find('.parentCheckBox').attr('checked') == true && this.checked == false)
$(this).closest('table').find('.parentCheckBox').attr('checked', false);
if (this.checked == true) {
var flag = true;
$(this).closest('table').find('.childCheckBox').each(
function() {
if (this.checked == false)
flag = false;
}
);
$(this).closest('table').find('.parentCheckBox').attr('checked', flag);
}
}
);
}
);