碰到的问题:tree选择子节点时,父级节点的值没有选择
解决方法如下(红色部分):
原代码:
_checkParent:function(){ if($(this).parent().hasClass("tree")) return; var parent = $(this).parent().parent(); var stree = $(">ul", parent); var ckbox = stree.find(">li>a").size()+stree.find("div.ckbox").size(); var ckboxed = stree.find("div.checked").size(); var aClass = (ckboxed==ckbox?"checked":(ckboxed!=0?"indeterminate":"unchecked")); var rClass = (ckboxed==ckbox?"indeterminate":(ckboxed!=0?"checked":"indeterminate")); $(">div>.ckbox", parent).removeClass("unchecked").removeClass("checked").removeClass(rClass).addClass(aClass); var $checkbox = $(":checkbox", parent); if (aClass == "checked") $checkbox.attr("checked","checked"); else if (aClass == "unchecked") $checkbox.removeAttr("checked"); parent._checkParent(); }
扩展后代码:
_checkParent:function(){ if($(this).parent().hasClass("tree")) return; var parent = $(this).parent().parent(); var stree = $(">ul", parent); var ckbox = stree.find(">li>a").size()+stree.find("div.ckbox").size(); var ckboxed = stree.find("div.checked").size(); var aClass = (ckboxed==ckbox?"checked":(ckboxed!=0?"indeterminate":"unchecked")); var rClass = (ckboxed==ckbox?"indeterminate":(ckboxed!=0?"checked":"indeterminate")); $(">div>.ckbox", parent).removeClass("unchecked").removeClass("checked").removeClass(rClass).addClass(aClass); var $checkbox = $(":checkbox", parent).eq(0);//只选择这一级节点的第一个checkbox if (aClass == "checked"||aClass == "indeterminate") //当样式为indeterminate时,也选择这一个父节点的值 $checkbox.attr("checked","checked"); else if (aClass == "unchecked") $checkbox.removeAttr("checked"); parent._checkParent(); }