ztree如何判断当前节点以及所有子节点是否被ztree 异步加载载过

zTree异步加载父节点选中子节点不会自动选中 如何解决_ztree吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,474贴子:
zTree异步加载父节点选中子节点不会自动选中 如何解决
炫酷暗黑奇迹MU页游强悍来袭,秒怪秒BOSS,来玩就送海量RMB礼包!
已经解决 已参照checkbox_halfCheck.html解决
贴吧热议榜
使用签名档&&
保存至快速回贴<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&& 最近在项目中遇到一个问题,需求如下:
根据选中不同的人员(ID)向后台发送ajax请求,通过返回的数据来生成该人员的权限访问树,该树目录最少为3级目录,在生成的时候会自动勾选上次保存过的选中状态,点击保存后会将选中状态发送给后端用于保存。(zTree的api参考网站)
遇到的bug:
用户必须再次点击已选中的根目录,并重新选中一次才能在保存的时候将其根目录及所有选中的子节点ID号提供给后端,如果用户不做任何操作直接点击保存,则只能获取到根目录的ID号,无法获取其下所有子目录和节点的ID号。
原因分析:
由于树的生成采用的是异步加载方式,即一开始只生成所有的根目录,用户必须点击某一条根目录展开才会生成其下的子目录或子节点。这样可以减少初步加载时的响应时间,但是如果用户不去点击展开,那么系统默认的是没有子节点的,因此在点击保存时只能获得选中的根目录ID号。
解决方式:
在zTree的setting设置中将生成树时的回调函数里添加zTree.expandAll(false)(展开或折叠所有的节点树)。这样插件就会遍历生成所有的节点,并根据保存的选中ID来将对于的节点勾选。
callback : {//控制插件中所有的回调函数触发
onClick : zTreeOnClick,//点击时的回调函数
onNodeCreated: zTreeOnNodeCreated,//这是节点生成时的回调函数
onAsyncSuccess:showTree//异步加载成功完成后的回调函数
//其方法为根据data返回的选中ID来将对应的节点勾选
function zTreeOnNodeCreated(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("tree");
$.post("renyxx/getQuanx",{id:$("#renyxxb_id").val()},function(data){
for(var i = 0;i & data[0].i++){
if(data[0][i]==treeNode.id){
treeNode.checked = true;
//zTree.expandAll(false);
zTree.updateNode(treeNode);
},"json");
zTree.expandAll(false);//加入这行代码后,其就会在生成每一个根目录时自动遍历其下的所有子目录或节点
大家可以在回调函数中加入console来看一下插件生成时的运行顺序,并不是一次生成所有的根目录,而是一个个的生成。
另外,这样生成的树只有最开始的一个根目录,很难看,一般都会要求至少展开一级,因此可以在回调函数中添加onAsyncSuccess,在异步加载完成时会执行如下方法
function showTree(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("tree");
var tree=zTree.getNodeByTId("tree_1");
zTree.expandNode(tree,true);//展开指定的根目录
阅读(...) 评论()zTree 异步加载 添加子节点重复问题_ztree吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,474贴子:
zTree 异步加载 添加子节点重复问题
//添加结点, 产品和版本function addNode(event) {
rMenu.css({ "visibility": "hidden" });
var treeNode = zTree.getSelectedNodes()[0];
if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {
//添加产品结点
treeNode =
treelevel = 1;
} else if (treeNode) {
//添加版本结点
pid = treeNode.
treelevel = 2;
"AddNode.action",
{ type: treelevel, id: pid },
function(nodeIdAndName) {
var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName);
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 });
});}原本直接添加子节点的时候,如果父节点没有展开,会添加两个一样的子节点(第一次的时候);后来我对父节点是否展开进行了判断,但是却变成了如果父节点展开,会添加两个一样的子节点(第一次的时候),这个问题要怎么解决呢?
炫酷暗黑奇迹MU页游强悍来袭,秒怪秒BOSS,来玩就送海量RMB礼包!
神奇的Bug,将上述写到单独的js文件,调用的时候就不会出现问题,将上述写到aspx页面的&script&&/script&脚本里就会出现问题
将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 });改成 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");
treeNode.isParent=
zTree.reAsyncChildNodes(treeNode, "refresh");
zTree.expandNode(treeNode, true);
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
}问题就可以解决了,但是有没有优化呢?感觉改后的代码分类太多了
貌似不用这么麻烦吧?前两天回答了类似的问题。1、点击添加子节点后,就直接 ajax 传给后台保存数据,捕获 success 事件2、ajax success 时,利用 treeNode.zAsync 属性就可以知道此父节点是否进行过异步加载,如果为 false 那么直接 reAsyncChildNodes 刷新,如果为 true 那么利用 addNodes 或同样利用 reAsyncChildNodes 刷新这里是否确定用刷新需要根据你的需求决定,因为刷新会把下面所有的子孙节点都清空重新加载的。
补充一下 zAsync 这个属性是 v3.1 添加的
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 });
zTree.reAsyncChildNodes(treeNode, "refresh");谢谢你的回答,非常感谢!
贴吧热议榜
使用签名档&&
保存至快速回贴温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
一个爱笑,却总笑得傻傻的家伙
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(4225)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'zTree 异步加载时添加子节点重复的问题',
blogAbstract:'$.post(&&&&&&& \"AddNode.action\",&&&&&&& { type: treelevel, id: pid },&&&&&&& function(nodeIdAndName) {&&&&&&&&&&& var params = /([^\\|]+)\\|([^\\|]+)/.exec(nodeIdAndName);/////////////////////////////////////////////////写法1//////////////////////////////////////////////////////////////////////////////////////////////////&& &&& &//&& &&& &&& &if',
blogTag:'ztree,异步加载,添加子节点',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'一个爱笑,却总笑得傻傻的家伙',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 ztree 异步刷新节点 的文章

 

随机推荐