Z-tree实例——复选框

来源:互联网 发布:arm linux 外设使用 编辑:程序博客网 时间:2024/06/06 01:08

官网实例,个人研究测试,以备用。

1、页面布局:

Html代码  收藏代码
  1. <BODY>  
  2. <div class="content_wrap">  
  3.     <div class="zTreeDemoBackground left">  
  4.         <ul id="treeDemo" class="ztree"></ul>  
  5.     </div>  
  6.     <p>父子关联关系:<br/>  
  7.     被勾选时:  
  8.     <input type="checkbox" id="py" checked />关联父  
  9.     <input type="checkbox" id="sy" checked />关联子<br/>  
  10.       
  11.     取消勾选时:  
  12.     <input type="checkbox" id="pn" checked />关联父  
  13.     <input type="checkbox" id="sn"  checked />关联子  
  14.   
  15.     <br/><br/>  
  16.   
  17.     <input type="checkbox" onclick="enableOrDisNodes(1);">禁止/解禁选中节点</input><br />  
  18.     <input type="checkbox" onclick="enableOrDisNodes(2);">勾选/取消勾选选中的节点</input><br />  
  19.     <input type="checkbox" onclick="getCheckNodes();">获取勾选/未勾选的节点数量</input><br />  
  20.     <input type="checkbox" onclick="getSelectedCheckNodes(this);">获取选定节点中勾选/未勾选的节点数量</input><br />  
  21.     </div>  
  22. </div>  
  23. </BODY>  
2、 用到JS: 
Js代码  收藏代码
  1. <SCRIPT type="text/javascript">  
  2. var setting = {  
  3.     check: {  
  4.         enable: true,//设置zTree的节点上是否显示checkbox/radio框,默认值: false  
  5.         chkboxType: { "Y""ps""N""ps" }  
  6.     },  
  7.     data: {  
  8.         simpleData: {  
  9.             enable: true//使用简单模式  
  10.         }  
  11.     },  
  12.     key:{  
  13.     checked:"checked"//zTree 节点数据中保存check状态的属性名称。默认值:"checked"  
  14.     },  
  15.     view:{  
  16.         selectedMulti:true//允许选多个  
  17.     }  
  18. };  
  19.   
  20. var zNodes=[  
  21. //checked:节点的checkBox/radio的勾选状态,默认为false  
  22. //nocheck:设置节点是否隐藏checkbox/radio,true 表示此节点不显示 checkbox / radio,不影响勾选的关联关系,不影响父节点的半选状态。false 表示节点具有正常的勾选功能  
  23. //chkDisabled:设置节点的 checkbox / radio 是否禁用,默认值false  
  24. {"id":1,"pId":0,"name":"河北",open:true,checked:true},//checked:true,默认勾选  
  25. {"id":2,"pId":1,"name":"石家庄",open:true,checked:false},//checked:false,默认不勾选  
  26. {"id":21,"pId":2,"name":"化皮镇",nocheck:true},//nocheck:true,不显示checkbox  
  27. {"id":22,"pId":2,"name":"承安镇",nocheck:false},//nocheck:false,显示checkbox  
  28. {"id":23,"pId":2,"name":"正莫镇",chkDisabled:true},//禁用checkbox  
  29.   
  30. {"id":3,"pId":1,"name":"邯郸"},  
  31. {"id":4,"pId":1,"name":"保定"},  
  32. {"id":5,"pId":1,"name":"沧州"},  
  33.   
  34. {"id":6,"pId":0,"name":"河南",open:true,isParent:true},  
  35. {"id":7,"pId":6,"name":"郑州"},  
  36. {"id":8,"pId":6,"name":"开封"},  
  37. {"id":9,"pId":6,"name":"洛阳"},  
  38. {"id":10,"pId":6,"name":"南阳"},  
  39.   
  40. {"id":11,"pId":0,"name":"山东",open:false,isParent:true},  
  41. {"id":12,"pId":11,"name":"济南"},  
  42. {"id":13,"pId":11,"name":"济宁"},  
  43. {"id":14,"pId":11,"name":"淄博"},  
  44. {"id":15,"pId":11,"name":"德州"},  
  45.   
  46. {"id":16,"pId":0,"name":"山西",open:false,isParent:true},  
  47. {"id":17,"pId":16,"name":"太原"},  
  48. {"id":18,"pId":16,"name":"大同"},  
  49. {"id":19,"pId":16,"name":"朔州"},  
  50. {"id":20,"pId":16,"name":"阳泉"}  
  51. ]  
  52. /** 
  53. *设置勾选checkbox对于父子节点的关联关系 
  54. */  
  55. function setCheck() {  
  56.     var zTree = $.fn.zTree.getZTreeObj("treeDemo"),  
  57.     py = $("#py").attr("checked")? "p":"",  
  58.     sy = $("#sy").attr("checked")? "s":"",  
  59.     pn = $("#pn").attr("checked")? "p":"",  
  60.     sn = $("#sn").attr("checked")? "s":"",  
  61.     type = { "Y":py + sy, "N":pn + sn};  
  62.     zTree.setting.check.chkboxType = type;  
  63. }  
  64.   
  65. /* 
  66. setChkDisabled():禁用或解禁某个节点的checkbox/radio 
  67. @param treeNode:需要禁用或解禁checkbox/radio的节点数据 
  68. @param disabled:禁用/解禁 true:禁用 false:解禁省略此参数,等同于disabled=false,即解禁,不影响treeNOde.nochecked=true的节点(checkbox/radio不显示的节点) 
  69. @param inheritParent:全部父节点是否进行同样的操作,true表示影响父节点 false表示不影响 
  70. @param inheritChildren 全部子节点是否进行同样的操作,true表示影响子节点 false表示不影响 
  71. */  
  72.   
  73. /* 
  74. checkNode():勾选或取消勾选单个节点 
  75. @param treeNode:需要勾选或取消勾选的节点数据 
  76. @param checked:true/false,勾选/取消勾选,省略此参数,则根据对此节点的勾选状态进行 toggle 切换不影响 treeNode.nochecked = true 的节点。 
  77. @param checkTypeFlag:true/false,是否按照setting.check.chkboxType属性进行父子节点的勾选联动操作,true进行联动,false 只修改此节点勾选状态,无任何勾选联动操作 
  78. @param callbackFlag:true/false,是否触发回调函数,true 表示执行此方法时触发beforeCheck&onCheck事件回调函数,false:不触发回调函数 
  79. */  
  80.   
  81. /** 
  82. *禁止或解禁选中节点 
  83. *@param flag:1-禁用/解禁 2-勾选/取消勾选 
  84. */  
  85. function enableOrDisNodes(flag){  
  86.     var treeObj = $.fn.zTree.getZTreeObj("treeDemo");//获取树对象  
  87.     var nodes = treeObj.getSelectedNodes();//获取选中的节点(这个选中并不是勾选复选框,而是点击节点,选中时节点有背景色,可以按住ctrl同时选多个)  
  88.     var status=null;//状态  
  89.     if(nodes.length>0){//说明有节点选中  
  90.         if(flag==1){//禁用/解禁  
  91.             for (var i=0; i<nodes.length; i++) {  
  92.                 status = nodes[i].chkDisabled;//获取禁用状态  
  93.                 status=(!status);//取反,若当前节点禁用则解禁,若不禁用则禁用  
  94.                 treeObj.setChkDisabled(nodes[i], status,true,true);  
  95.             }  
  96.         }else{//勾选/取消勾选  
  97.             for (var i=0; i<nodes.length; i++) {  
  98.                 status = nodes[i].checked;//获取勾选状态  
  99.                 status=(!status);//取反,若当前节点被勾选,则取消勾选,否则勾选  
  100.                 treeObj.checkNode(nodes[i],status,true);  
  101.                 //treeObj.checkNode(nodes[i],'',true);//忽略第二个参数,自动采用toggle进行切换  
  102.             }     
  103.         }  
  104.     }else{  
  105.         alert("请先选中节点!");  
  106.         return false;  
  107.     }  
  108. }  
  109. /** 
  110. *点击时获取勾选/未勾选的节点数量 
  111. */  
  112. function getCheckNodes(obj){  
  113.     var treeObj = $.fn.zTree.getZTreeObj("treeDemo");//获取树对象  
  114.     var checkNodes=null;  
  115.     var count = 0;  
  116.     var count2 = 0;  
  117.     //getCheckedNodes:获取当前树中输入框被勾选或未勾选的节点集合,true:被勾选的集合 false:未勾选的集合  
  118.     checkNodes= treeObj.getCheckedNodes(true);//勾选的数量  
  119.     count = checkNodes.length;  
  120.     count2= (treeObj.getCheckedNodes(false)).length;//未勾选的数量  
  121.     alert("整棵树中被勾选的节点有"+count+"个\n"+"没被勾选的节点有"+count2+"个");  
  122.     return false;  
  123. }  
  124.   
  125. /** 
  126. *点击时获取选定节点的勾选/未勾选节点数量 
  127. *chkboxType:勾选checkbox对于父子节点的关联关系,默认值:{ "Y": "ps", "N": "ps" } 
  128. *Y属性定义 checkbox 被勾选后的情况;N属性定义 checkbox 取消勾选后的情况; 
  129. *"p" 表示操作会影响父级节点;"s" 表示操作会影响子级节点。请注意大小写,不要改变 
  130. */  
  131. function getSelectedCheckNodes(obj){  
  132.     var treeObj = $.fn.zTree.getZTreeObj("treeDemo");//获取树对象  
  133.     var nodes = treeObj.getSelectedNodes();//选定节点  
  134.     var checked=null;  
  135.     var count = 0;  
  136.     if(nodes.length>0){  
  137.         for(var i=0;i<nodes.length;i++){  
  138.             checked=nodes[i].checked;//获取勾选属性  
  139.             if(checked==true){//选中节点  
  140.                 count++;//自增1  
  141.             }  
  142.         }  
  143.         alert("选中节点:"+nodes.length+"个\n"+  
  144.               "被勾选:"+count+"个\n"+  
  145.               "没被勾选:"+(nodes.length-count)+"个");  
  146.         return false;  
  147.           
  148.     }else{  
  149.         alert("请先选中节点!");  
  150.         $(obj)[0].checked=false;//取消勾选状态  
  151.         return false;  
  152.     }  
  153. }  
  154.   
  155. $(document).ready(function(){  
  156.     $.fn.zTree.init($("#treeDemo"), setting, zNodes);  
  157.     setCheck();  
  158.     $("#py").bind("change", setCheck);  
  159.     $("#sy").bind("change", setCheck);  
  160.     $("#pn").bind("change", setCheck);  
  161.     $("#sn").bind("change", setCheck);  
  162. });  
  163. </SCRIPT>  
3、 说明:

发现ztree当中使用checkbox并非form表单中的<input type='checkbox'/>而是用样式来定义的:

<span treenode_check="" class="button chk checkbox_false_full" id="treeDemo_19_check"></span>

样式class中的button使用有复选框的背景图片:zTreeStandard.png。正因如此,在获取选中节点时获取的并不是勾选了复选框的节点,而是点击文字有背景色的节点,它可以按住ctrl同时选多个。