需求:
有一棵這樣的樹,點擊父節點時,子節點要全勾,取消父節點時,子節點又要全部取消勾選,但是,還有子節點全部取消勾選的同時,還得讓父節點的勾選保留。
想法:
第一想法就是取消級聯檢查自己實現oncheck事件啊。。。但是,要初始化勾選的時候,發現進入了死循環或者總是達不到滿意的效果。。。。
解決辦法:
oncheck事件正常實現,在初始化勾選的時候避開樹的oncheck事件就好。
那麼問題來了,怎麼避免,想到急用checkbox的選中事件,可惡的是,easyui的tree裏面的checkbox居然是span!!!操作樣式實現勾選效果的。既然你操作css那我我也操作。下面上代碼:
onCheck:function(node,checked) {
if (node.attributes == 1 && !checked) { // 父節點勾選子節點全選
var child = $('#departTree').tree('getChildren', node.target);
for(var i =0;i<child.length;i++){
$('#departTree').tree('uncheck',child[i].target);
}
}
if (node.attributes == 1 && checked) { // 父節點取消勾選子節點也全部取消
var child = $('#departTree').tree('getChildren', node.target);
for(var i =0;i<child.length;i++){
$('#departTree').tree('check',child[i].target);
}
}
}
注:attributes這裏我用來做父節點根節點的標誌,0表示根節點,1表示父節點,2表示子節點
然後再初始化勾選的時候
var node = $('#departTree').tree('find', deptIdArr[i]);
var v = node.target;
var $v =$(v);
$v.children('.tree-checkbox').removeClass('tree-checkbox0').addClass('tree-checkbox1');
注:deptIdArr[i]這邊表示節點的id
操作CSS來模仿勾選效果,不觸發oncheck事件。這樣就能達到想要的初始得效果了。