基于ztree的封装

1.使用方法

<script>
    var methods = {onclick:fn2};
    initSelTree("dwtree", "dw", methods, true);
    function fn2(e, treeId, treeNode){
        console.log($("#DW").val());
        console.log( $("#DW_NAME").val());
    }


</script>
/**
 * 初始化化方法  给树的父级的上一个元素加入点击事件
 * treeId   树的id
 * treeType 树的种类  当前种类
 * methods 传入的方法 ,现在支持的方法 onclick filter
 * multiSel 是否单选
 */
function initSelTree(treeId, treeType,methods,multiSel) {
	//后台访问树的URL
	var treeUrl ="/tree/"+treeType+"/getTreeNode";
	var isShowIcon =  true;
	$("#"+treeId).attr("treeType",treeType);
	$.fn.zTree.init($("#"+treeId), getSetting(treeUrl,methods,isShowIcon,multiSel), null);
//给父类元素加上click事件	
	 $("#"+treeId).parent().parent().click(function(event){
//点击输入框不弹出
		 if(event.target.type||event.target.type=="text"){
			 hideMenu(treeId);
			 return ;
		 }
//如果已经显示则隐藏		 
		if(! $("#"+treeId).is(":visible")){
			showSelMenu(treeId);
		}
	  });
}
/**
 * 显示下拉框
 * 
 */
function showSelMenu(treeId) {
	var treePrev= $("#"+treeId).parent().prev();
	if(treePrev.val()==""){
		var ztree=$.fn.zTree.getZTreeObj(treeId);
			ztree.checkAllNodes(false);
	}
	var treeWidth= $("#"+treeId).parent().prev().width();
	$("#"+treeId).parent().slideDown("fast");
	if(treeWidth+14<180){
		$("#"+treeId).parent().css("width","180px");
		$("#"+treeId).parent().css("right",(treeWidth+14-180)/2+"px");
	}else{
		$("#"+treeId).parent().css("width",(treeWidth+14)+"px");
	}
	$("body").bind("mousedown",{treeId:treeId}, onBodyDown);
	
}
/**
 * 
 * @param url url
 * @param methods 定义的方法 
 * @returns setting
 */
function getSetting(url,methods,isShowIcon,multiSel){
	//onclick事件
	var onclick=onclickSel;
	//返回值成功调用事件
	var filter=ajaxDataFilter;
	
	var oncheck = onCheck;
	//是否显示图标
	var showIcon = false;

	var otherParam = {};

	var onAsyncSuccessCy =onAsyncSuccess ;
	if(methods&&methods.hasOwnProperty("onAsyncSuccess")){
		onAsyncSuccessCy = methods.onAsyncSuccess;
	}
	if(methods&&methods.hasOwnProperty("onclick")){
		onclick = methods.onclick;
		oncheck = methods.onclick;
	}
	if(methods&&methods.hasOwnProperty("filter")){
		filter = methods.filter;
	}
	if(methods&&methods.hasOwnProperty("oncheck")){
		oncheck = methods.oncheck;
	}
	if(methods&&methods.hasOwnProperty("otherParam")){
		otherParam = methods.otherParam;
	}
	if(methods&&methods.hasOwnProperty("showIcon")){
		showIcon = methods.showIcon;
	}
	var beforeClickFun  = null;
	var beforeCheckFun  = null;
	if(multiSel){
		beforeClickFun = clearSel;
		beforeCheckFun = clearSel;
	}
		var setting = {
				view: {
					dblClickExpand: false,
					showIcon: showIcon,
					showLine: false,
				},
				data: {
					key:{
					name:"NAME"
				},
					simpleData: {
						enable: true
					},
				showIcon: showIcon
				},
				callback: {
					onCheck: oncheck,
					onClick: onclick,
					onAsyncSuccess: onAsyncSuccessCy,
					beforeCheck:beforeCheckFun,
				    beforeClick:beforeClickFun
				},
				async: {
					enable: true,
					url:url,
					autoParam:["ID=p_ID","ATTCODE=p_ATTCODE","PID=p_PID"],
					otherParam:otherParam,
					type:"get",
					dataFilter: filter
				},
				check:{
					enable:true,
					chkStyle:"checkbox",
					chkboxType:{"Y":"","N":""}//表示子 父 节点不关联
				}
			};
		return setting;
	}

/**
 * 绑定鼠标移除事件
 * @param treeId
 */
function hideMenu(treeId) {
	$("#"+treeId).parent().fadeOut("fast");
	$("body").unbind("mousedown",{foo:treeId}, onBodyDown);
}
/**
 * 按其他的元素时取消
 * @param event
 */
function onBodyDown(event) {
	var treeId = event.data.treeId;
	var treeObj = $.fn.zTree.getZTreeObj(treeId);
//隐藏位置  树的class      点击是树的父类       点击的父类有treeSelDiv这个属性
//	if (!(event.target.id == "menuBtn" || event.target == $("#"+treeId).parent() || $(event.target).parents(".treeSelDiv").length>0)) {
//		hideMenu(treeId);
//	}
	if (!(event.target.id == "menuBtn"|| $(event.target).parents(".treeSelDiv").length>0)) {
		hideMenu(treeId);
	}
	
}
/**
 * 调用成功时去掉没有元素的父节点
 * @param event
 * @param treeId
 * @param treeNode
 * @param msg
 */
function onAsyncSuccess(event, treeId, treeNode, msg) {
	if(msg.length==2){
		ztree=$.fn.zTree.getZTreeObj(treeId);
		treeNode.isParent = false;
		ztree.updateNode(treeNode);
	}else{
	}
}

/**
 * onCheck方法 会将复选框中的非父类的勾选元素  id和name 放入 父类的上一个元素
 * @param e
 * @param treeId
 * @param treeNode
 */		
function onCheck(e, treeId, treeNode) {
	onclickSel(e, treeId, treeNode);
}
function onclickSel(e, treeId, treeNode){
	var tree = $("#"+treeId);
	var treeNode_treeSel = tree.attr("treeNode_treeSel");//获取运维单位ID
	var checked_treeSel  = tree.attr("checked_treeSel")=="true";
	if(checked_treeSel==true){
		treeNode.checked = true;
	}else{
		
	var checked_tree = tree.attr("checked_treeSel");
	if(e.type=="click"){//判断是点的文本还是选择框 click是点的文本
	//if(!treeNode.isParent){ //判断是不是父节点 不是父节点就进去
		ztree=$.fn.zTree.getZTreeObj(treeId);
			if(checked_tree&&treeNode_treeSel==treeNode.ID){
				treeNode.checked = checked_treeSel;
			}
	treeNode.checked = !treeNode.checked;
	ztree.updateNode(treeNode);
	setTreeValue(e, treeId, treeNode);
	//}
	}
	else{
		ztree=$.fn.zTree.getZTreeObj(treeId);
			if(checked_tree&&treeNode_treeSel==treeNode.ID){
				treeNode.checked = !checked_treeSel;
			}
		setTreeValue(e, treeId, treeNode);	
	}
	var fn =tree.attr("clickOrCheck");
	if(fn){
		var str =fn+"("+treeNode+")";
		eval(str);
	}
	}
}

function setTreeValue(e, treeId, treeNode){
	var tree = $("#"+treeId);
	var zTree = $.fn.zTree.getZTreeObj(treeId),
	nodes = zTree.getCheckedNodes(true),
	v = "";
	ids="";
	var attcodes ="";
	for (var i=0, l=nodes.length; i<l; i++) {
		//if(!nodes[i].isParent){
			v += nodes[i].NAME + ",";
			ids += nodes[i].ID + ",";
			var nodesCode =nodes[i].ATTCODE;
			if(attcodes.indexOf(nodesCode)<0){
				attcodes +=nodesCode+ ",";
			}
		//}
	}
	if (v.length > 0 ) v = v.substring(0, v.length-1);
	if (ids.length > 0 ) ids = ids.substring(0, ids.length-1);
	if (attcodes.length > 0 ) attcodes = attcodes.substring(0, attcodes.length-1);
	var treePrev = $("#"+treeId).parent().prev();
	if(treePrev.prev().val()!=ids){
		var fn =treePrev.prev().attr("clickmethod");
		if(fn){
			var str =fn+"('"+ids+"')";
			eval(str);
		}
	}
	 tree.attr("treeNode_treeSel",treeNode.ID);
	treePrev.val(v);
	treePrev.prev().val(ids);
	treePrev.prev().attr("attcode",attcodes);
	treePrev.prev().attr("parentid",treeNode.PARENT_ID);
	treePrev.prev().attr("speciaid",treeNode.ID);
	treePrev.prev().attr("isUser",treeNode.isUser);
}

function ajaxDataFilter(treeId, parentNode, responseData) {
    if (responseData) {
      for(var i =0; i < responseData.length; i++) {
    	  //by ts
    	  var code = (responseData[i].ATTCODE==undefined?responseData[i].ATTRIBUTECODE:responseData[i].ATTCODE);
    	  responseData[i].iconSkin = getIconSkin(code);
    	  if(responseData[i].children){
    		  ajaxDataFilter(null,null,responseData[i].children);
    	  }
      }
    }
    return responseData;
};
/**
 * 根据类型换成iconskin
 * type attcode
 * .ztree li span.button.county_ico_docu{margin-right:2px; background: url(./img/county.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
   .ztree li span.button.county_ico_open,.ztree li span.button.county_ico_close{margin-right:2px; background: url(./img/county.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
 * skin css中定义的属性
 * @param attcode
 * @returns
 */
function getIconSkin(attcode) {
	   if(attcode){
	    var type =["COUNTY"];
	    var skin =["county"];
	    for (var i = 0; i < type.length; i++) {
			if(attcode == type[i]){
				return skin[i];
			}
		}
	   }
};
/**
 * 单选
 * @param treeId
 * @param treeNode
 * @param clickFlag
 * @returns
 */
function clearSel(treeId, treeNode, clickFlag) {
	var tree = $("#"+treeId);
	var ztree=$.fn.zTree.getZTreeObj(treeId);
	if(treeNode){
	/*if(treeNode.isParent){
		
	}else{*/
		var checked_treeSel = treeNode.checked;
		tree.attr("checked_treeSel",checked_treeSel);
	//}
	}
	if(checked_treeSel==true){
		treeNode.checked = true;
	}else{
		ztree.checkAllNodes(false);	
	}
	
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值