easyui中帶checkbox框的tree


 1 var data = [{
 2             "id": 1,
 3             "checked":true,
 4             "text": "系統菜單",
 5             "children": [{
 6                 "id": 11,
 7                 "text": "用戶管理",
 8                 "checked":true,
 9                 "children": [{
10                     "id": 19,
11                     "text": "增加用戶"
12                 }, {
13                     "id": 3,
14                     "text": "修改用戶"
15                 }, {
16                     "id": 5,
17                     "text": "刪除用戶",
18                     "checked":true
19                 }]
20             }, {
21                 "id": 12,
22                 "text": "角色管理",
23                 "children": [{
24                     "id": 13,
25                     "text": "增加角色",
26                     "checked":true
27                 }, {
28                     "id": 3,
29                     "text": "修改角色"
30                 }, {
31                     "id": 5,
32                     "text": "刪除角色"
33                 }]
34             }]
35         }, {
36             "id": 2,
37             "text": "其他",
38             "state": "closed"
39         }];
40         
41         $(function () {
42             $("#tt").tree({
43                 data: data,
44                 checkbox: true,
45                 cascadeCheck: false,
46                 onCheck: function (node, checked) {
47                     if (checked) {
48                         var parentNode = $("#tt").tree('getParent', node.target);
49                         if (parentNode != null) {
50                             $("#tt").tree('check', parentNode.target);
51                         }
52                     } else {
53                         var childNode = $("#tt").tree('getChildren', node.target);
54                         if (childNode.length > 0) {
55                             for (var i = 0; i < childNode.length; i++) {
56                                 $("#tt").tree('uncheck', childNode[i].target);
57                             }
58                         }
59                     }
60                 }
61             });
62         });
63 
64         function getChecked()
65         {
66             var arr = [];
67             var checkeds = $('#tt').tree('getChecked', 'checked');
68             for (var i = 0; i < checkeds.length; i++) {
69                 arr.push(checkeds[i].id);
70             }
71             alert(arr.join(','));
72         }
         <ul id="tt"></ul>
    <input type="button" value="獲取選中" onclick="getChecked()" />

但是有時候我們從后台返回list,

然后將list轉換成一個Tree.   easyui根據這個數據生成一個樹.

那么如何將list轉換成一棵樹的基本代碼就要查看上面一片博客了(http://www.cnblogs.com/guoyansi19900907/p/4701746.html)

現在給出從數據庫獲取數據,根據指定數據來控制樹的選中和未選中狀態.

下面這段代碼是將list的數據轉換成tree,並且加入checked=true或false來控制選中,未選中.

 1 /**
 2  * checkbox 樹
 3  * @param rows
 4  * @param param
 5  * @returns {Array}
 6  */
 7 function convertCheckbox(rows,param){
 8     /*for(var gys=0;gys<rows.length;gys++){
 9         console.log(rows[gys]["if_fuquan"]);
10     }*/
11     function getTreeCheck(n){
12         if(n==1){
13             return true;
14         }else{
15             return false;
16         }
17     }
18     
19     
20     function exists(rows, parentId){
21         for(var i=0; i<rows.length; i++){
22             if (rows[i][param.id] == parentId) return true;
23         }
24         return false;
25     }
26     
27     var nodes = [];
28     // 獲取頂級的node
29     for(var i=0; i<rows.length; i++){
30         var row = rows[i];
31         if (!exists(rows, row[param.parentId])){
32             
33             //gys    給頂層添加鏈接
34             var topNode={id:row[param.id],text:row[param.name],checked:getTreeCheck(row[param.checked])};                
35             nodes.push(topNode);
36             
37             // nodes.push({
38                 //id:row.id,
39                 //text:row.name
40             //}); 
41         }
42     }
43     
44     var toDo = [];
45     for(var i=0; i<nodes.length; i++){
46         toDo.push(nodes[i]);
47     }
48     while(toDo.length){//循環toDo當toDo長度為零時停止
49         var node = toDo.shift();//刪除第一個元素,然后返回第一個元素,改變數組長度    
50         // 獲取子節點
51         for(var i=0; i<rows.length; i++){
52             var row = rows[i];
53             if (row[param.parentId] == node.id){
54                 var child = {id:row[param.id],text:row[param.name]};
55                 // gys 添加鏈接
56                 
57                 //if(row[param.checked]){
58                 //alert(row[param.checked]);
59                     child.checked=getTreeCheck(row[param.checked]);
60                 //}
61                 if (node.children){
62                     node.children.push(child);
63                 } else {
64                     node.children = [child];
65                 }
66                 toDo.push(child);
67             }
68         }
69     }
70     return nodes;
71 }
 1 var objTree= $("#fuquanTree");
 2              objTree.tree({
 3                     url:"data.json",
 4                     method: 'get',
 5                     checkbox:true,
 6                     cascadeCheck: false,
 7                     loadFilter:function(data){//這里的privilege_id,privilege_name,if_fuquan,parent_privilege_id對應的都是數據庫的字段.
 8                         return convertCheckbox(data,{id:"privilege_id",name:"privilege_name",checked:"if_fuquan",parentId:"parent_privilege_id"});
 9                     },
10                     onCheck: function (node, checked) {
11                         if (checked) {
12                             var parentNode =objTree.tree('getParent', node.target);
13                             if (parentNode != null) {//選中子集時,父級沒選中就選中父級
14                                 objTree.tree('check', parentNode.target);
15                             }
16                         } else {//取消選中,如果有子集就取消選中子集
17                             var childNode = objTree.tree('getChildren', node.target);
18                             if (childNode.length > 0) {
19                                 for (var i = 0; i < childNode.length; i++) {
20                                     objTree.tree('uncheck', childNode[i].target);
21                                 }
22                             }
23                         }
24                     }
25                 });

 


免責聲明!

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



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