ztree使用修改版

var setting = {
 check: {enable: true,nocheckInherit: true},
 async: {enable: true,url:"",autoParam:["tcode"],dataFilter: filter},
 callback: {onCheck:zTreeOnCheck,onClick:zTreeOnClick,onExpand: onExpand}
};
function onExpand(event, treeId, treeNode)
{
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
if(treeNode.checked)
{
for(var j=0;j<treeNode.children.length;j++)
zTree.setChkDisabled(treeNode.children[j], true);
}
}
function setCheck() {
   var zTree = $.fn.zTree.getZTreeObj("treeDemo"); 
   zTree.setting.check.chkboxType = {  "Y" : "", "N" : "p"  };   
  }
function filter(treeId, parentNode, childNodes) {
 return childNodes;
}
//用zTree方法勾选checkbox
function zTreeOnCheck(e, treeId, treeNode){
var isTure=false;//标志位,用来判断父节点下的子节点是否都选中了,是为true,没有为false
var checked=treeNode.checked;//获取节点的选中状态
 var zTree = $.fn.zTree.getZTreeObj("treeDemo");//获取ztree对象
 if(!checked&&treeNode.children!=null)//父节点取消选择
 {
 for(var j=0;treeNode.isParent&&j<treeNode.children.length;j++)
    zTree.setChkDisabled(treeNode.children[j], false);  //设置子节点可选  
 }
 else{//父节点选择了
 for(var j=0;treeNode.isParent&&treeNode.children!=null&&j<treeNode.children.length;j++)
 {
 zTree.checkNode(treeNode.children[j],false,false);//取消所有的子节点
 zTree.setChkDisabled(treeNode.children[j], true);//设置子节点不可选
 }    
 }
var nodes=treeNode;//把节点付给nodes
if(nodes.isParent&&checked&&treeNode.open&&nodes.length!=null)//父节点展开了,并且有子节点,选中了
 {
 for(var j=0;j<nodes.children.length;j++)
  zTree.setChkDisabled(nodes.children[j], true);
 }    
 var node="";
 if(nodes.getParentNode()!=null)
 {
 node=zTree.getNodeByParam("id", nodes.getParentNode().id);//获取当前子节点的父节点,若有
 var child=node.children;//获取父节点下的子节点
 if(child!=undefined)

  for(var j=child.length-1;j>=0;j--)
 {
 if(child[j].checked)
 {isTure=child[j].checked;
 continue;
 }
 else{
 isTure=false;
 break;
 }
 }
 if(isTure==true)
 {//子节点都选择了
 zTree.checkNode(node, true, false);//选中父节点为勾选状态
for(var i=0;i<child.length;i++)
{
zTree.checkNode(child[i],false,false);//取消所有的子节点
zTree.setChkDisabled(child[i], true);//不能选了
}
 }
 
 }
 }
}

//目录中点击方法
function zTreeOnClick(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeDemo");
if(!treeNode.getChkDisabled)
{if(treeNode.checked)//更改当前checkbox的勾选状态
{
zTree.checkNode(treeNode,false,false);
}
else{
zTree.checkNode(treeNode,true,false);
}
zTreeOnCheck(event, treeId, treeNode);//调用checkbox的点击状态函数
}

};

$(document).ready(function(){
 $.fn.zTree.init($("#treeDemo"), setting);
 setCheck();
});

function c()
{
var delidID="", delidName="";var node="";
 var zTree = $.fn.zTree.getZTreeObj("treeDemo").getCheckedNodes(true);//获取所有选中状态的节点  
  for (var i = 0; i < zTree.length; i++) {  
 delidID += zTree[i].id + ",";
 delidName += zTree[i].name + ",";
  }
  alert(delidID+delidName);
}

这个版本修复了上次的直接点最后一个会导致父节点选中的问题,最后一个bug,双击子节点目录,会导致本来已禁用的子节点又能选了,想到的方法是禁用双击,不过没有找到怎么实现。。。。。有知道的吗,给留个言

你可能感兴趣的:(ztree,父节点子节点互动)