`
zTreeAPI
  • 浏览: 345691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

zTree v3.0 beta Bug 汇总

阅读更多

    v3.0 改动很大,而且计划这次 从 beta 到 正式版至少需要1-2个月的时间进行沉淀,因为这期间一方面需要修正bug、增加适当功能。同时也在努力争取正式版时推出英文版的 Demo 和 API,所以专门开篇文章,用来发布 v3.0 beta 中已经发现的 bug 和解决方案,帮助这期间遇到 bug 的朋友解决问题。


    在发布正式版之前,查看 v3.0 beta 的改动计划以及 Bug 修正都在这篇博文中进行记录。

 

[最后修改日期 2012-01-04] ---- 已进入 最后测试阶段

 

---【增加】---

1、【增加】setting.check.autoCheckTrigger 默认值 false,可以设置联动选中时是否触发 onCheck 回调函数

    制作完毕,随v3.0正式版发布

 

2、【增加】setting.callback.beforeEditName 回调函数,以保证用户可以捕获点击编辑按钮的事件

    制作完毕,随v3.0正式版发布

 

3、【增加】treeNode.checkDisable 属性,显示 checkbox 但是用户无法修改 checkbox 状态,并且该checkbox 会影响父节点的 checkbox 的半选状态

    制作 完毕,随v3.0正式版发布

 

4、【增加】setting.check.nocheckInherit 属性,用户设置子节点继承 nocheck 属性,用于批量初始化节点,不适用于已经显示的节点

    制作 完毕,随v3.0正式版发布

 

5、【增加】setting.edit.drag.autoExpandTrigger 默认值 false,可以设置自动展开、折叠操作时是否触发 onExpand 回调函数

    制作 完毕,随v3.0正式版发布

 

6、【增加】setting.view.nameIsHTML 默认值 false,允许用户对 name 设置 DOM 对象

    制作 完毕,随v3.0正式版发布

 

7、【增加】类似于Ext.tree.TreeFilter类, 可以实现树节点的过滤,隐藏不匹配过滤条件的节点

由于时间原因,此功能等正式版发布后,制作 zTree 扩展工具时一起开发。

 

8、【增加】treeNode.click 属性的说明文档!
    制作 完毕,随v3.0正式版发布

9、【增加】treeObj.setChkDisabled 方法用于设置 checkbox / radio disabled 状态

    制作完毕,随v3.0正式版发布


10、【增加】treeNode.halfCheck 属性,用于强制设定节点的半选状态
    制作完毕,随v3.0正式版发布

---【修改】---

1、【修改】异步加载 & 编辑功能 共存时,拖拽节点 或 增加节点 导致 ie 上报错的 bug (apply 方法引起)

    解决方案:将 jquery.ztree.core-3.0.js 文件中 Line 682 的 return fun.apply(zt, param);  修改为 return fun.apply(zt, param?param:[]);

 

2、【修改】zTreeStyle 样式冲突

    解决方案:将 zTreeStyle 的第 82 行 ul.zTreeDragUL 修改为  ul.ztree.zTreeDragUL,并且将该行的 overflow:auto; 修改为 overflow:hidden;

 

3、【修改】setting.data.key.title 默认值设置为 "",初始化时自动赋值为 setting.data.key.name 这样可避免希望 title 与 name 一致的用户反复设置参数

    修正完毕,随v3.0正式版发布

 

4、【修改】点击叶子节点的连接线会触发 expand 事件的 bug

    修正完毕,随v3.0正式版发布

 

5、【修改】IE 下 点击叶子节点连线会出现虚线框的 bug

    修正完毕,随v3.0正式版发布

 

6、【修改】updateNode 导致 checkbox 半选状态错误的 bug

    解决方案:将 jquery.ztree.excheck-3.0.js 文件中 Line 470 的 if (node.nocheck !== true) { 修改为 if (node.nocheck !== true && node[childsKey] && node[childsKey].length > 0) {

     原解决方案会引起勾选关联的错误,正确解决方案:

     (1) 保留 Line 470 的 if (node.nocheck !== true) {

     (2) 将 Line 472 的 node.check_Child_State = value ? 2 : 0; 修改为 node.check_Child_State = (node[childsKey] && node[childsKey].length > 0) ? (value ? 2 : 0) : -1;

 

7、【修改】checkNode 方法实现 toggle 功能, 取消 expandAll 方法 toggle 功能

    修正完毕,随v3.0正式版发布

 

8、【修改】zTree 内鼠标移动会抢页面上 input 内的焦点的 bug

 

    解决方案:请将 jquery.ztree.core-3.0.js 中 621行 的 if (x) { 修改为  if (x && $("input:focus").length == 0) { 

    以上解决方案会导致 IE6 下编辑模式出现异常 (因此需要用 try catch 将 这个 if 段落包起来)。

 

9、【修改】beforeRename / onRename 的触发方式——即使名称内容未改变也会触发,便于用户配合 beforeEditName 捕获编辑状态的结束,赋予用户更多调整规则的权利

    修正完毕,随v3.0正式版发布

 

10、【修改】与 easyUI 共存时无法拖拽的 bug

    解决方案:请将 Line 442左右的 if (settings[s].edit.enable && settings[s].treeId != setting.treeId 替换为 if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId

 

11、【修改】beforeRename 在 Firefox 下如果利用 alert,会触发两次的 bug

    修正完毕,随v3.0正式版发布

    补充:重新修正了一下,beforeName如果return false,将不会强行让input 获取焦点,这样可以避免blur导致的反复验证。 同时使用editName 方法可以主动设置 input 获取焦点,便于控制

 

12、【修改】checkNode/expandNode/removeNode 方法,默认不触发回调函数,恢复 v2.6 的默认状态,同时增加 callbackFlag 参数,设置为 true 时,可以触发回调函数

    修正完毕,随v3.0正式版发布

 

13、【修改】IE9下“根据参数查找节点”的Demo 报错:行14 重新声明常量属性

    修正完毕,随v3.0正式版发布(Demo自身问题,无意间定义了变量名为 history 导致!)

 

14、【修改】初始化 zTree 时 onNodeCreated 事件回调函数中无法 用 getZTreeObj 获取 zTree 对象的 bug

    修正完毕,随v3.0正式版发布

 

15、【修改】setting.edit.drag.prev / next / inner 参数,增加被拖拽的节点集合

    修正完毕,随v3.0正式版发布

 

16、【修改】异步加载模式下,otherParam 使用 Array 数组会出错的 bug。例如: ["id", "1", "name", "test"]

   解决方案1:请先使用 JSON 数据进行设置,不要使用 Array 数组

   解决方案2:请将 core 的 js 代码中 asyncParamOther 替换为 async.otherParam 即可

 

17、【修改】FireFox 下多棵树之间无法正常拖拽的 bug

    修正完毕,随v3.0正式版发布

 

18、【修改】exedit 中调用 excheck库的方法时没有进行容错处理,导致如果只加入 exedit 而没有 excheck的时候,会出现 js 错误

    修正完毕,随v3.0正式版发布

 

19、【修改】显示 checkbox 的 zTree 在编辑模式下,移动节点不会更新父节点半选状态的 bug

    修正完毕,随v3.0正式版发布

 

20、【修改】treeNode.childs --> children; treeObject.removeChilds --> removeChildNodes; setting.data.key.childs --> children(英文不好惹的祸!抱歉了!)

    修正完毕,随v3.0正式版发布

 

21、【修改】onRemove 回调中得到的 treeNode 还可以查找 preNode、nextNode 的bug。 修正后,getPreNode 和 getNextNode 都返回 null; 为了便于查找父节点,getParentNode 仍保留

    修正完毕,随v3.0正式版发布

 

22、【修改】简单数据模式下,如果 id 与 pId 的值相同会导致该节点无法正常加载的 bug

    修正完毕,随v3.0正式版发布

 

23、【修改】移动或删除中间节点会导致最后一个节点连接线图标变小的 bug

 

    修正完毕,随v3.0正式版发布

 

18
4
分享到:
评论
182 楼 lidabo712 2011-12-16  
zTree是否可以设置有些节点带checkbox,有些节点不带checkbox,即是否可以针对每个节点设置带不带checkbox?
181 楼 hyper2k 2011-12-15  
能不能把节点的行间距做大点,比如22px,18px的间距太小了,中文本身就比英文要大的。
180 楼 jimlgx 2011-12-14  
zTree 使用确实不错,速度和美观程度都挺好

参考demo中
构建树的代码

	$.fn.zTree.init($("#treeDemo"), setting, zNodes);


获得树对象的代码

	var zTree = $.fn.zTree.getZTreeObj("treeDemo"),


感觉这种方式 是不是 可以考虑 修改为类似于

 var zTree=	$("#treeDemo").ztree({setting:setting,nodeData:zNodes});



大多jQuery 插件使用这种方式,如 jquery UI
建议保留这种习惯吧!



179 楼 zTreeAPI 2011-12-14  
doc1388 写道
1、通过初始化获取的,

removeNode效果是有的,但是在firefox中报了is not a function错误

2、手动触发click节点的js楼主给下代码呢



1、请确认你用来 remove 的node 数据是从zTree 内部获取的。
2、手动触发 click,没有现成的代码,还请自己学习实践一下。

  关于手动触发 click 事件,大概方法。
  (1) 直接用js 的fireEvent 方法或者 用jQuery 的trigger 方法实现你的需求。(如何实现可以去 google 搜索 jQuery 的trigger)
  (2) 直接用js 调用onclick 方法,同时利用 selectNode 方法选中你的目标节点。
   这个就是用js 去调用 onClick回调指定的那个函数即可,传入对应的参数。 selectNode 去看看API如何使用。
178 楼 doc1388 2011-12-12  
1、通过初始化获取的,

removeNode效果是有的,但是在firefox中报了is not a function错误

2、手动触发click节点的js楼主给下代码呢

177 楼 zTreeAPI 2011-12-12  
doc1388 写道
nodes[0]是存在的,tree也是存在的

tree.removeNode(nodes[0]);

显示错误: tree.removeNode is not a function


你的tree 是什么对象? 怎么得到的? 正确的treeObj 得到的方法有两个:
1、初始化语句 返回的结果
2、通过 $.fn.zTree.getZTreeObj 方法获取
176 楼 doc1388 2011-12-12  
nodes[0]是存在的,tree也是存在的

tree.removeNode(nodes[0]);

显示错误: tree.removeNode is not a function
175 楼 doc1388 2011-12-12  
能否给一下代码,已知node了,触发click
174 楼 zTreeAPI 2011-12-12  
doc1388 写道
顺带问下如何通过一个节点获取子节点

1、关于手动触发 click事件,因为不清楚你具体的需求,大概讲解一下方法。
(1) 直接用js 的fireEvent 方法或者 用jQuery 的trigger 方法实现你的需求。
(2) 直接用js 调用onclick 方法,同时利用 selectNode 方法选中你的目标节点

2、关于获取子节点
  v3.0 beta 可以看 setting.data.key.childs 这个属性。 如果你没有设置,那么默认子节点都是 treeNode.childs 属性内。 但正式版发布时会将 childs 修改为 children 。
  如果你还在用 v2.6 那么默认的就是 nodes 属性
173 楼 doc1388 2011-12-10  
顺带问下如何通过一个节点获取子节点
172 楼 doc1388 2011-12-09  
楼主,你好,请问下,我用了ztree,感觉很好,准备把原来的xtree替换掉,现在碰到了一个问题:

function clickNode(event, treeId, treeNode){   
    tree.selectNode(treeNode);   
    parent.changeSysMenu(treeNode.value);   
}   
  
var tree;   
var setting = {   
    async: {enable: true,url: getUrl},   
    callback: {   
        onClick: clickNode,   
        onExpand: clickNode,   
        onCollapse: clickNode   
    }   
};  

function clickNode(event, treeId, treeNode){
	tree.selectNode(treeNode);
	parent.changeSysMenu(treeNode.value);
}

var tree;
var setting = {
	async: {enable: true,url: getUrl},
	callback: {
		onClick: clickNode,
		onExpand: clickNode,
		onCollapse: clickNode
	}
};


我在点击节点时触发clickNode函数,然后调用另一个函数更改一个页面地址

我如何通过js手动触发onclick事件
171 楼 msphell 2011-12-09  
msphell 写道
如何在ztree打开编辑模式的情况下。点击节点进行页面跳转,我参考了api的说明在onClick函数里进行跳转,window.location.href=treeNode.gourl;,gourl是我自定义的node属性,里面保存这url地址,初始化数据:{ id:11, pId:1, name:"叶子节点11",gourl:"www.google.hk"},现在点击节点后,页面跳转的地址不正确,在我的页面后面加上了url地址。请问要如果解决。谢谢!

问题解决了。要加上http://才是绝对路径。自己蠢了。
170 楼 msphell 2011-12-09  
如何在ztree打开编辑模式的情况下。点击节点进行页面跳转,我参考了api的说明在onClick函数里进行跳转,window.location.href=treeNode.gourl;,gourl是我自定义的node属性,里面保存这url地址,初始化数据:{ id:11, pId:1, name:"叶子节点11",gourl:"www.google.hk"},现在点击节点后,页面跳转的地址不正确,在我的页面后面加上了url地址。请问要如果解决。谢谢!
169 楼 1happy10 2011-12-07  
期待正式版,加油!
168 楼 zTreeAPI 2011-12-07  
kkgoing 写道
右键功能怎么只有添加和删除,没有修改功能,希望加上,呵呵

你好, 对于 zTree 本身来说右键没有任何功能! zTree 只不过提供了 右键的回调函数,Demo中只是为了演示如何监控右键的操作。
167 楼 kkgoing 2011-12-07  
右键功能怎么只有添加和删除,没有修改功能,希望加上,呵呵
166 楼 zTreeAPI 2011-12-05  
citybug 写道
....

关于添加子节点:
如果你是自己写逻辑,添加子节点,那么你必须要在添加子节点之前判断是否该子节点已经添加。 如果你用了zTree提供的异步加载功能,那么不会重复进行异步加载。 这个具体问题要看你的实际需求而定。

补充: 同一个问题请不要再每个地方都发一遍,谢谢。
165 楼 citybug 2011-12-05  
citybug 写道
使用addNodes添加子节点时,JS出现错误:对象不支持属性或方法。
代码如下:
function nodeClick()
{
	var zTreeObj=$.fn.zTree.getZTreeObj("DeptTree");
	var selectNode=zTreeObj.getSelectedNodes();
	var id=selectNode[0].id;
	var zNodes=new Array();

	$.ajax({   
        async : false,   
        cache:false,   
        type: 'GET',   
        dataType : "text/xml",   
        url: "http://localhost:8080/BSFRAME/selectdept.do?method=AsyncNode&id=" + id,//请求的action路径   
        error: function () {//请求失败处理函数   
            alert('请求失败');   
        },   
        success:function(data){ //请求成功后处理函数。       
            var nodes=dealData(data);
            for(var i=0;i<nodes.length;i++)
            {
            	var node="{\"id\":\"" +nodes[i].id + "\",\"pId\":\"" + nodes[i].superid + "\",\"name\":\"" + nodes[i].text + "\"}";
            	var obj=eval('(' + node + ')');
            	zNodes.push(obj);
            }   
        }   
    }); 
    alert("aaa");
    zNodes=[{id:"12345",pId:"000002",text:"单位22"}];
    newNodes=zTreeObj.addNodes(setting,selectNode[0],zNodes,true);
}

能运行到alert("aaa");,就是最后一句报错。
我试过newNodes=zTreeObj.addNodes(selectNode[0],zNodes,true);也是报同样的错误。


另有一个问题请教,通过点击一个节点来添加子节点,会不会每次点击都添加一遍?如何避免这种问题?





JS出错的问题解决了,是少包含了一个JS文件。但是其他问题还得请教。
164 楼 citybug 2011-12-05  
使用addNodes添加子节点时,JS出现错误:对象不支持属性或方法。
代码如下:
function nodeClick()
{
	var zTreeObj=$.fn.zTree.getZTreeObj("DeptTree");
	var selectNode=zTreeObj.getSelectedNodes();
	var id=selectNode[0].id;
	var zNodes=new Array();

	$.ajax({   
        async : false,   
        cache:false,   
        type: 'GET',   
        dataType : "text/xml",   
        url: "http://localhost:8080/BSFRAME/selectdept.do?method=AsyncNode&id=" + id,//请求的action路径   
        error: function () {//请求失败处理函数   
            alert('请求失败');   
        },   
        success:function(data){ //请求成功后处理函数。       
            var nodes=dealData(data);
            for(var i=0;i<nodes.length;i++)
            {
            	var node="{\"id\":\"" +nodes[i].id + "\",\"pId\":\"" + nodes[i].superid + "\",\"name\":\"" + nodes[i].text + "\"}";
            	var obj=eval('(' + node + ')');
            	zNodes.push(obj);
            }   
        }   
    }); 
    alert("aaa");
    zNodes=[{id:"12345",pId:"000002",text:"单位22"}];
    newNodes=zTreeObj.addNodes(setting,selectNode[0],zNodes,true);
}

能运行到alert("aaa");,就是最后一句报错。
我试过newNodes=zTreeObj.addNodes(selectNode[0],zNodes,true);也是报同样的错误。


另有一个问题请教,通过点击一个节点来添加子节点,会不会每次点击都添加一遍?如何避免这种问题?


163 楼 zTreeAPI 2011-12-02  
liu47a 写道
zTree生成的复选框选中后只能异步方式提交吗? 我想把生成的树放在Form表单中,然后直接submit提交,但不知道后台怎么获取啊? 怎么定义复选框的名称呢?

OMG,建议不要这么做,因为 zTree 的复选框根本不是标准的checkbox 、radio 控件。
你利用treeNode 数据拼接字符串传给后台就是了。

相关推荐

    JQuery zTree v3.0

    zTree v3.0 正式版在功能、性能方便比 v2.x 版本都有了很多改善,尤其是性能方面。 但还要再提提醒大家,v3.0 在代码架构上的改动较大,所以升级 v2.x 版本的 zTree 必须要配合修改代码,不能仅仅升级 js 文件。

    JQuery zTree v3.0 下载

    zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件。它与 IE、FireFox、Chrome 等浏览器保持兼容,在一个页面内可同时生成多个Tree 实例,支持一次性静态生成和Ajax 异步加载两种方式,...

    zTree 3.0 实例下载

    **zTree 3.0 实例详解** zTree是一款基于JavaScript的树形插件,广泛应用于网页中的数据展示,如文件目录、组织架构等场景。zTree 3.0是其一个重要的版本,提供了丰富的功能和高度的自定义性。在实际开发中,拥有...

    JQuery树型菜单 zTree v2.6 beta

    **jQuery zTree v2.6 Beta 知识点详解** jQuery zTree 是一个基于 jQuery 的开源项目,专门用于实现交互式树形菜单。在 v2.6 beta 版本中,它提供了丰富的功能和优化,使得在网页开发中构建动态、可操作的树形结构...

    JQuery zTree v3.2 最新版

    zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器 支持 JSON 数据 ...

    JQuery zTree v2.6

    《JQuery zTree v2.6:文档与经典实例解析》 JQuery zTree是一款基于JavaScript的树形插件,其v2.6版本在功能和性能上进行了优化,为开发者提供了更强大的树形结构处理能力。这个版本的zTree不仅包含了完整的API...

    JQuery zTree v3.3

    zTree v3.3是该插件的一个版本,它在前一版本的基础上进行了优化和增强,旨在提供更高效、更稳定的服务。 在zTree v3.3中,核心功能包括: 1. **树结构展示**:zTree能够轻松地将复杂的数据结构转化为用户友好的...

    zTree源码开发js

    •zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 •采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀 •兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器 •支持 ...

    zTree 非常强大的树形控件

    、zTree v3.0 针对大数据量一次性加载进行了更深入的优化,实现了延迟加载功能,即不展开的节点不创建子节点的 Dom。 2)、对于每级节点最多一百左右,但总节点数几千甚至几万,且不是全部展开的数据,一次性加载的...

    zTree v3.5.37 API 文档

    **zTree v3.5.37 API 文档** zTree 是一款基于 jQuery 的树形插件,广泛应用于网页中的树形菜单、目录结构展示等场景。v3.5.37 版本的 API 文档是理解并有效利用 zTree 功能的关键。 **一、设置(Setting)配置...

    JQuery zTree v3.5.14

    **jQuery zTree v3.5.14** 是一个基于jQuery的树形插件,它在Web开发中广泛用于创建交互式的树形结构。这个版本3.5.14是zTree的一个稳定版本,提供了丰富的功能和优化的性能。下面我们将深入探讨zTree的核心特性、...

    ztree树的部分js文件

    zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器 支持 JSON ...

    JQuery zTree v3.4 ztree

    10. **更新日志**:`更新日志3.x.txt` 文件记录了 v3.4 版本的改动和改进,这对于了解新功能和修复的 bug 非常有帮助。 11. **文件结构**: - `api`:包含了 zTree 的 API 文档,详细解释了每个方法和参数的用途。...

    zTree v3.3 API帮助chm格式

    zTree v3.3 API帮助 根据官方网站提供的帮助制作 因为原始文档不能直接在本地打开帮助查看麻烦,所以制作成了chm格式

    JQuery zTree v2.6 基本用法实例

    **jQuery zTree v2.6 基本用法实例** zTree是一款基于jQuery的树形插件,广泛应用于网站的导航、组织结构展示、权限管理等场景。它提供了丰富的API和CSS样式,使得开发者可以方便地进行定制化开发。在v2.6版本中,...

    JQuery zTree v2.6.zip

    《JQuery zTree v2.6 - 构建交互式树形菜单的高效工具》 JQuery zTree是一款基于jQuery库的开源项目,用于构建功能丰富的树形菜单。在v2.6版本中,它提供了更为强大的功能和优化的性能,以满足网页开发中对于动态...

    zTree-zTree_v3.5.17

    zTree是一款广泛应用于Web开发中的JavaScript树形菜单插件,其最新版本为zTree_v3.5.17。这个插件以其强大的功能、灵活的配置选项和良好的用户体验深受开发者喜爱。在本压缩包中,你将获得zTree的核心源码,以便于你...

    JQuery zTree v3.1完整API完整demo

    **jQuery zTree v3.1 完整API详解** `jQuery zTree` 是一个基于 jQuery 的强大树形插件,广泛应用于网站导航、组织结构展示、文件管理等场景。v3.1 版本提供了丰富的功能和完善的API,使得开发者能够更加灵活地定制...

Global site tag (gtag.js) - Google Analytics