1.如何让用户只能点击页子节点

var setting = {
callback: {
beforeClick: zTreeBeforeClick
}
};
function zTreeBeforeClick(treeId, treeNode, clickFlag) {
return !treeNode.isParent;//当是父节点 返回false 不让选取
};

2.用户在点击之前只能点击三项

    function zTreeBeforClick(treeId,treeNode,clickFlag){
if(treeNode.checked)return true;//如果是点击取消就不执行下面
var zTree=$.fn.zTree.getZTreeObj(treeId);
var nodes=zTree.getCheckedNodes(true);
var num=0;
for(var i=0;i<nodes.length;i++){
if(!nodes[i].isParent)num++;
}
if(num>2){
alert("选择超出");
return false;
}
}

3.页面记载的时候默认选择第一个子项的最后一个子节点,并且点击

单选:

    var el=zTreeObj.getNodes()[0];
while(el.isParent){
el=el.children[0];
}
zTreeObj.selectNode(el);
setting.callback.onClick(null, zTreeObj.setting.treeId, el);//设置第一个节点被点击

多选

    var el=zTreeObj.getNodes()[0];
while(el.isParent){
zTreeObj.expandNode(el,true,false,false);//展开当前节点
el=el.children[0];
}
zTreeObj.checkNode(el);

4.将勾选的节点,组成字符串,用“\”隔开,最后一个不需要;

  思路:不同于往常的写法点

    1.用数组的reduce方法代替了for循环

    2.原本是在字符串的最后部分加上“\”变成了在字符串前面添加“\”(除去第一个)

    var nodes=treeObj.getCheckedNodes(true);
data.groupTreeCode=nodes.reduce(function(o,v,i){
if(!!o){o+"\\"}
o+=v.original_id;
return o;
})

5.只获取选中的叶子节点的id,用“;”隔开

    var nodes=treeObj.getCheckedNodes(true);
data.groupTreeCode=nodes.reduce(function(o,v,i){
if(!v.isParent){
if(o==undefined){
o="";
}
if(!!o){o+=";"}
o+=v.id;
}
return o;
})

7.ztree不能跨级勾选(两个父节点)

思路:

  在勾选之前的事件里,

  获取之前勾选的节点最前一级的id,

  再得到本次点击节点的最上一级的id,用while循环得到

  两者进行对比,不一样就return false

代码:

    function zTreebeforeCheck(treeId, treeNode){
var treeObj=$.fn.zTree.getZTreeObj(treeId);
var selnode=treeObj.getCheckedNodes();
var lastCheckPid="";//上一次选中的父id
var thisCheckPid=""//本次选中的父id
if(selnode.length>0){
lastCheckPid=selnode[0].id;
}else{
return true//如果之前一个都没有勾选
}
var el=treeNode;
while(!!el.getParentNode()){//如果有父级找父级的id
el=el.getParentNode();
}
thisCheckPid=el.id;
if(thisCheckPid===lastCheckPid){
return true
}else{
//window.wxc.xcConfirm("不能跨节点勾选,请重新选择!", window.wxc.xcConfirm.typeEnum.warning);
window.wxc.xcConfirm("不能跨节点勾选,请重新选择!", window.wxc.xcConfirm.typeEnum.error);
return false
}
}

为了更好的用户体验,可以在else中将页面中所有的节点取消勾选,然后return true 这样一来就可以实现跨级勾选就去掉原来的勾选

        thisCheckPid=el.id;
if(thisCheckPid===lastCheckPid){
return true
}else{
//window.wxc.xcConfirm("不能跨节点勾选,请重新选择!", window.wxc.xcConfirm.typeEnum.error);
//return false
//清除掉页面选中的节点
treeObj.checkAllNodes(false);
return true
}

ztree框架使用问题汇总的更多相关文章

  1. J2EE进阶(十)SSH框架整合常见问题汇总(一)

    SSH框架整合常见问题汇总(一) 前言 以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决. HTTP Status 404 - No result defined for actio ...

  2. Java工程师三大框架面试题汇总

    1. Hibernate3 提供了属性的延迟加载功能? 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内 ...

  3. Linux界面自动化测试框架不完全汇总

    首先可参考wiki此文,非常详尽:https://en.wikipedia.org/wiki/List_of_GUI_testing_tools 以下是我调研并实验过的(实验环境ubuntu 16.0 ...

  4. J2EE进阶(十二)SSH框架整合常见问题汇总(三)

    在挂失用户时,发现userid值为空,但是在前台输入处理账号22时,通过后台输出可以看出,后台根据前端输入在数据库中查询到结果对象并输出该对象的userid,而且Guashi对象也获取到了其值. 解决 ...

  5. vue前端框架面试问题汇总

    1.active-class是哪个组件的属性?嵌套路由怎么定义?答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答: ...

  6. CodeIgniter框架——知识要点汇总

    NO1.学习要点: 一.CodeIgniter 框架的简介 二.CodeIgniter 框架的安装 三.CodeIgniter 框架的目录结构分析 四.CodeIgniter 框架是如何工作的? 五. ...

  7. ASP.NET Core框架揭秘[博文汇总-持续更新]

    第1部分 跨平台开发体验 1 跨平台开发体验 001 跨平台开发体验: Windows [上篇]         002 跨平台开发体验: Windows [中篇]        003 跨平台开发体 ...

  8. 全新升级的AOP框架Dora.Interception[汇总,共6篇]

    多年之前利用IL Emit写了一个名为Dora.Interception(github地址,觉得不错不妨给一颗星)的AOP框架.前几天利用Roslyn的Source Generator对自己为公司写的 ...

  9. ue4框架C++语法汇总文章

    1.Run external .exe file TCHAR* url = TEXT("C:\\windows\\system32\\calc.exe"); FPlatformPr ...

随机推荐

  1. python之numpy文件操作

    目录 numpy 中的文件操作总结 CVS文件 多维数据的存取 numpy 的便捷文件存取 numpy 中的文件操作总结 CVS文件 CSV (Comma‐Separated Value,逗号分隔值) ...

  2. Office Diary(工作日记本)

    Office Diary 是一款免费.绿色小巧的写日记和收集文档资料的软件,界面效仿Office Word ,支持Word中常用的文字编辑排版功能,可以作为Microsoft Office产品系列的强 ...

  3. Day3作业 .

    ,))::])]): :-])# 3,使用while和for循环分别打印字符串s=’asdfer’中每个元素. # 4,实现一个整数加法计算器:# 如:content = input(‘请输入内容:’ ...

  4. IO流-File,字节流,缓冲流

    1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把 ...

  5. WPF中XAML的触发器的属性,事件 都有那些?以及如何寻找

    在编写XAML的触发器时,会有属性,事件. 那么这些都是哪里来的呢? 属性,是附加属性或者依赖属性 事件,那就是事件. 如何寻找呢? 很简单,在想要使用的触发器的对象上(也就是有光标的时候)按下F12 ...

  6. 316. Remove Duplicate Letters (accumulate -> count of the difference elements in a vector)

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  7. Cocos Creator 入门

    Cocos Createor 资源 略 场景 节点树 节点与组件 坐标系 脚本 组件声明,生命周期回调 var Component = cc.Class({ // 用于序列化,可省略 name: 's ...

  8. 设置使用的python版本

    一.查看当前使用的python版本,或设置使用的python版本 二.python2中默认使用ASCII码,无法识别中文,报错如图,解决办法,设置字符集为utf-8

  9. Maven国内源设置阿里云地址

    Maven国内源设置 目前国外的maven源访问非常慢,作为一个Java开发者,是一件很痛苦的事,而国内的maven源,oschina已经关闭,目前最好的方式,就是使用阿里云的镜像: <mirr ...

  10. 【guava】前提条件

    guava为编写漂亮代码提供了很大的便利,今天,我想向你展示下我是怎么使用预判断来避免不必要的if/throw 申明,使用选择来提升代码逻辑性. 预判断并不是新东西,Apache Commons项目有 ...