我有一个类似的问题如果在 JQuery 中未选中所有子节点,则取消选中父节点 https://stackoverflow.com/questions/6556446/uncheck-parent-node-if-all-children-unchecked-in-jquery/6556519#6556519(使用此解决方案)并尝试对其进行修改,以便如果未选中父级(上面/下面未能做到这一点),则子级也将全部取消选中。
JSFiddle 对于上述内容(http://jsfiddle.net/fRxVs/ http://jsfiddle.net/fRxVs/)
jQuery.each(jQuery('#treeList ul li').find(':checkbox'), function(){
jQuery(this).change(function (){
if (jQuery(this).is(':checked')) {
jQuery(this).parentsUntil('#treeList').siblings().filter('input:checkbox').attr('checked', true).trigger('change');
}else{
jQuery(this).parents('ul:first').siblings('input:checkbox').prop('checked', $(this).parent().siblings().children('input:checked').length).trigger('change');
}
});
});
虽然我不知道为什么,但我必须改变prop
从最后一行到attr
为了让它由于某种原因在本地正确地作为 JSFiddle 工作......
基本上我有一个 3 级设置:
Grand-Parent
- Parent
-- Child
- If the
grandparent
被选中/取消选中,那么它的子项和孙子也应该全部被选中/取消选中。
- If the
parent
被选中/取消选中,其子级及其父级也应被选中/取消选中。
- If the
children
被检查,那么应该检查其父母和祖父母(如果没有检查孩子,则不应检查父母)。
我正在尝试将其更改为大陆、国家、地区 - 我想如果我只是这么说你就会理解......
Thanks
这是解决方案:Fiddle: http://jsfiddle.net/fRxVs/55/ http://jsfiddle.net/fRxVs/55/
$('#treeList :checkbox').change(function (){
$(this).siblings('ul').find(':checkbox').prop('checked', this.checked);
if (this.checked) {
$(this).parentsUntil('#treeList', 'ul').siblings(':checkbox').prop('checked', true);
} else {
$(this).parentsUntil('#treeList', 'ul').each(function(){
var $this = $(this);
var childSelected = $this.find(':checkbox:checked').length;
if (!childSelected) {
$this.prev(':checkbox').prop('checked', false);
}
});
}
});
修改及说明
-
$
完全一样jQuery
。使用时要保持一致:jQuery
仅当您不确定是否可以使用$ === jQuery
(is $
覆盖?)。
-
:checkbox
是一个匹配每个的选择器input[type="checkbox"]
。指定已经过时了input:checbkox
,因为复选框元素始终是输入元素。
-
.find(..)
寻找匹配选择器的子元素(不一定是直接子元素)。"#treeList :checkbox"
更快,并且具有等效的结果$('#treeList').find(':checkbox')
.
- 当属性/方法/事件添加到 jQuery 对象时,所有与选择器匹配的元素都将被修改。因此,您不必单独循环每个元素:
jQuery.each(jQuery('#treeList :checkbox'), function(){ jQuery(this).change(...)})
可以缩短为jQuery('#treeList :checkbox').change(...)
.
- 你不必触发
change
更改复选框检查状态后,因为该函数已经处理了完整的树。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)