ztree 编辑的节点名称重复怎么办

ztree 编辑的节点名称重复怎么办,第1张

$.post(

"AddNode.action",

{ type: treelevel, id: pid },

function(nodeIdAndName) {

var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName)

/////////////////////////////////////////////////写法1//////////////////////////////////////////////////////////////////////////////////////////////////

//if ((!treeNode &&event.target.tagName.toLowerCase() != "button" &&$(event.target).parents("a").length == 0) || treeNode.open){

// treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

// }

// else{

// zTree.expandNode(treeNode, true)

// treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

// }

/////////////////////////////////////////////////写法2//////////////////////////////////////////////////////////////////////////////////////////////////

//if (!((!treeNode &&event.target.tagName.toLowerCase() != "button" &&$(event.target).parents("a").length == 0) || treeNode.open)) {

//zTree.expandNode(treeNode, true)

//}

//treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

/////////////////////////////////////////////////写法3//////////////////////////////////////////////////////////////////////////////////////////////////

// if(!treeNode &&event.target.tagName.toLowerCase() != "button" &&$(event.target).parents("a").length == 0)

// {

//treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

// }

// else if(treeNode.open)

// {

//if(treeNode.isParent)

//{

//zTree.reAsyncChildNodes(treeNode, "refresh")

//}

//else

//{

//treeNode.isParent=true

//zTree.reAsyncChildNodes(treeNode, "refresh")

//}

// }

// else

// {

// zTree.expandNode(treeNode, true)

// treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

// }

/////////////////////////////////////////////////写法4//////////////////////////////////////////////////////////////////////////////////////////////////

//if ((!treeNode &&event.target.tagName.toLowerCase() != "button" &&$(event.target).parents("a").length == 0)){

//treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

//}

//else if(treeNode.open){

//if(!treeNode.isParent){

//treeNode.isParent=true

//}

//zTree.reAsyncChildNodes(treeNode, "refresh")

// }

//else{

//zTree.expandNode(treeNode, true)

//treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

//}

})

/*

上面四种写法都是用于zTree异步加载添加节点重复的问题

问题描述:

zTree树,第一次给父节点添加子节点时(该节点没有子节点时):如果父节点处于展开状态,只添加一个子节点;如果父节点处于闭合状态,会添加两个节点

问题原因:

之一,zTree v3.0 中,用 addNodes 方法添加节点时,zTree 会自动先去异步加载已有的子节点,然后再添加新的子节点。

所以,当父节点处于闭合状态(还没有子节点)时,用addNodes方法添加子节点节点后会在异步加载子节点的时候再添加一次,就出现两个一样的节点

之二,后来,即使当父节点处于展开状态(还没有子节点)时也会添加两个一模一样的子节点,是因为zTree树的节点在默认情况下都是子节点,这时给它添加

子节点会添加两个,一个是addNodes()添加的,一个是异步加载时添加的。其实这个时候只需要给它一个reAsyncChildNodes 方法强行进行异步加载即可。

其实我自己也还不是特别能理解清楚zTree的逻辑,大家可以看官网API,或者猛击这里 ,还有一个不错的地方就是百度的zTree吧

http://tieba.baidu.com/p/1548730337 这个地址里是百度贴吧 zTreeAPI大神对于我的问题给出的解答,根据他的回答,我又把代码优化了一下,这次代码就很简单而且逻辑也很清楚了

if ((!treeNode &&event.target.tagName.toLowerCase() != "button" &&$(event.target).parents("a").length == 0) || treeNode.zAsync)

treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel })

else

zTree.reAsyncChildNodes(treeNode, "refresh")

*/

/*很多时候程序出现问题都是代码的逻辑有问题,知道现在我终于深刻的理解到“逻辑”这个词的含义

一般情况都是每点一次,你都add了一个新的click event,注意这个event是可以叠加的,如果你对tree添加了一个事件,那么就会执行一次,再添加又会再多执行一次,导致最后越点执行越多。

这个在javascript经常遇到了,尤其是addEvent的时候。

你可以先从自己代码入手检查一下是不是哪里的click事件被无限叠加了。

jquery ztree 当前父节点下增加子节点问题_点击事件增加子节点

一、功能描述:利用jQuery ztree3.1版本插件做导航树形菜单时,页面打开先加载二级菜单,通过点击事件,异步加载的方式,在添加当前父节点的子节点。

二、初始步骤:

1.按照文档要求,导入jquery包,ztree插件包3.1版本;

2.编写相应的jsp页面代码

三、遇到问题:

1、通过chrome调试的时候,提示:addNodes不是当前jquery对象treeObj的方法。但是在api文档里确实存在这个方法。

2、经过很长时间的摸索,开始把ztree-core.js插件换成高版本的,结果addNodes好用了,但是没有了菜单的图标,而且所有的都是异步加载。

四、解决问题:

原因:最后在3.2版本更新日志中,发现这么一句话:

* 【修改】代码结构,将 addNodes、removeNode、removeChildNodes 方法 和 beforeRemove、onRemove 回调 转移到 core 内。

最终领悟,原来3.2版本之前的addNodes。。。等一些方法在ztree.exedit.js中,而且在3.1文档中,方法前也有E字母标识。

所以只要引入jquery.ztree.exedit-3.1.js 包,即可解决这个问题。

五、总结

粗心浪费了好多时间,注意API中的小细节。

这是jqueryztree 各个版本的URL:http://code.google.com/p/jquerytree/downloads/list,供大家参考。

六、jsp代码,只需要加入jquery.ztree.exedit-3.1.js ,url换了即可。

%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>

<title>机构维护</title>

<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />

<link rel="stylesheet" href="../zTreeStyle/zTreeStyle.css" type="text/css"/>

<script type="text/javascript" src="../jquery-1.4.2.js"></script>

<script type="text/javascript" src="../jquery.ztree.core-3.1.js"></script>

<script type="text/javascript"

</head>

<body>

<div>

<ul id="orgTree" class="ztree" style="width:230pxoverflow:auto"></ul>

</div>

<script type="text/javascript">

//配置setting

var ztreeObj,

setting = {

async: {

enable: true,//开启异步加载模式

contentType: "application/json", //Ajax 提交参数的数据类型。

type: "post",

dataType: "text",//Ajax 获取的数据类型

"url" : "${pageContext.request.contextPath}/org/makeOrgTree.action",

//自动提交当前节点的id

//假设 异步加载 父节点(node = {id:1, name:"test"}) 的子节点时,将提交参数 id=1

autoParam: ["id"]

},

//Ajax 返回的数据格式中,页面主要参数的设置

data: {

simpleData: {

enable: true,

idKey: "id",

pIdKey: "pid",

rootPid: "0"

}

},

//树形图动作

view: {

expandSpeed: "fast", //节点展开的速度

selectedMulti: false //设置是否允许同时选中多个节点。

},

//回调函数的设置

callback: {

onClick: zTreeOnClick //点击事件,当点击节点,做的事情。

}

}

/**

* 初始化树形菜单

*/

$(function(){

ztreeObj = $.fn.zTree.init($("#orgTree"),setting)

})

//点击事件的处理

function zTreeOnClick(event,treeId,treeNode){

pid =treeNode.id

var data = {"org.id":pid}

$.ajax({

url:"${pageContext.request.contextPath}/org/makeOrgTreeAgain.action",

type: "post",

dataType: "json",

data: data,

cache: false,

success: function(jsonArray){

var treeObj = $.fn.zTree.getZTreeObj("orgTree")

treeObj.addNodes(treeNode,jsonArray)

}

})

}

</body>

</html>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11578609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存