我有一个WooCommerce的在线商店,我试图用户正确选择类别。
其思想是,如果他们选择了一个子类别,那么父类别也会被选中。
我已经这样做了,但是当取消选中子类别(并且没有选中输入)时,父类别仍然处于选中状态。
$('ul.product_cat_list').find('input[type=checkbox]').each(function(index, input) {
$(input).bind('change', function() {
var checkbox = $(this);
var is_checked = $(checkbox).is(':checked');
if(is_checked) {
$(checkbox).parents('li').children('input').attr('checked', 'checked');
} else {
$(checkbox).parentsUntil('ul').find('input').removeAttr('checked');
}
});
});
这里是Fiddle
4条答案
按热度按时间iih3973s1#
查看标记的层次结构如下:
我已经添加了一些更多的层次,以便运行测试。运行测试后,可以看到相同的操作从起点重复执行。因此,您将需要一个递归调用的函数。
x一个一个一个一个x一个一个二个x
希望这对你有帮助!
lyr7nygr2#
编辑日期:
现在,解决方案是处理根节点之前的所有父节点:
小提琴:https://jsfiddle.net/diegopolido/040shgbg/4/
monwx1rj3#
我根据Diego的代码添加了"不确定状态复选框"。
小提琴:https://jsfiddle.net/wyysoft/xu0ev6wp/
ilmyapht4#
修改Eric Wang的代码以运行jQuery 1.6+,并修复以防止handleParents永远调用自己。
在这里拨弄:https://jsfiddle.net/ufoajkh7/