JQuery EasyUI之treegrid級聯勾選的簡單改進版


最近需要搞點權限方面的東西,后台用的是Jquery Easyui treegrid 1.2.6,可惜沒有級聯勾選功能

Tree如下格式

0

----1

--------2

--------3

----4

--------5

--------6

--------7

根節點是0,級別是0,有兩個子節點1,4,級別為1,

子節點1,4各自有多節點分別是2,3和5,6,7,級別為2

需求如下

1.選擇根節點0的時候,必須選擇所有后代節點,1-7全部都要被選擇

2.取消選擇根節點0的時候,必須取消選擇所有后代節點,1-7全部都要被取消選擇

3.當選擇節點1的時候,必須將1的父節點0也選擇,但此時0的其它子節點就不能自動被選擇了,保持原樣

4.取消1節點的時候,同2步,后代節點2,3都取消

5.當選擇2節點的時候,需要選擇1,0兩個節點,

6.取消2的時候,需要看3是否有沒有被選擇,如果有則1選擇,如果3沒選,則1不選,0是否被選需要看1或者4有沒有被選擇

總結一下

1.選擇某節點的時候,必須選擇這個節點下面的所有后代節點,反之,取消選擇后代子節點

2.選擇某節點的時候,必須將此節點的父節點選上,包含所有前代父節點

取消某節點的時候,如果此節點的兄弟節點都沒有被選擇,那么父節點,也取消選擇,

換句話說就是需要看父節點下面的子節點有沒有被選擇的,有那么父節點仍然選擇,如果沒有一個被選擇,那么父節點也取消選擇

-------------找前人的勞動成功

搜索到一篇文章,感謝原作者

treegrid級聯勾或深度級聯勾擴展:兩種擴展

里面有兩種方式實現了上述需求的的1,實現2中的一部分,

不過在取消節點時候,父節點是否取消有點問題

我主要是用第二種方式(屬性方式,非函數方式),這里我加上了一個函數 判斷父節點是否需要被取消

 1 /** 
 2  * 級聯判斷父節點 的子節點是否有被選擇的
 3  * @param {Object} target 
 4  * @param {Object} id 節點ID 
 5  * @return {TypeName}  
 6  */  
 7 function IsParentHasSelectedChildren(target,id,idField,status)
 8 {
 9     var count=0;
10     var children = target.treegrid('getChildren',id);    
11     var selectNodes = $(target).treegrid('getSelections');//獲取當前選中項     
12     var p=target.treegrid('find',id);  
13     //注意,這里的children是指后代所有子節點,不是指兒子節點,所以要加上children[i]['_parentId']==p[idField]過濾出兒子節點
14     for(var i=0;i<children.length ;i++  )
15     {
16         var childId = children[i][idField];  
17         for(var j=0;j<selectNodes.length;j++){  
18             if(selectNodes[j][idField]==childId && children[i]['_parentId']==p[idField])  
19                 count++;
20         }
21     }
22     //注意,click 函數在unselect事件之前運行,這里需要減去自己
23     return count-1>0;
24 }

主要是增加函數IsParentHasSelectedChildren,父節點下面的兒子節點被選擇的個數是否大於0來判斷是否取消父節點

 里面最后count減一,是當前click事件是在onselect事件有關,表示排除自己,這里沒有詳細研究,

在函數selectParent的里面加上第九行調用的

 

 1 function selectParent(target,id,idField,status){  
 2     var parent = target.treegrid('getParent',id);  
 3     if(parent){  
 4         var parentId = parent[idField];  
 5         if(status)  
 6             target.treegrid('select',parentId);  
 7         else  
 8         {
 9             if (!IsParentHasSelectedChildren(target,parentId,idField)) 10                 target.treegrid('unselect',parentId);  
11         }
12         selectParent(target,parentId,idField,status);  
13     }  
14 }  

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM