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. How do I create a .pyc file?

    Python automatically compiles your script to compiled code, so called byte code, before running it. ...

  2. LeftStr函数使用

    LeftStr(s, i); 表示返回字符串s的左边共I位字符的一个新字符串. var i: integer; s: string; result: string; begin i := ; s := ...

  3. 【SQL】- 基础知识梳理(二) - SQL简介

    一.引言 在梳理这些知识之前,说实话,如果有人问我SQL是什么?我可能会回答就是“INSERT,DELETE,UPDATE,SELECT”语句呗,还能是啥. 二.SQL概念 SQL是什么? SQL是S ...

  4. 转载:解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网

    最近在VMware虚拟机里玩Centos,装好后发现上不了网.经过一番艰辛的折腾,终于找到出解决问题的方法了.最终的效果是无论是ping内网IP还是ping外网ip,都能正常ping通.方法四步走: ...

  5. 《Think in Java》

    chapter 1 对象导论 面向对象程序设计(Object-oriented Programming ,OOP) chapter 2 一切都是对象 字段和方法 若类的某个成员变量是基本数据类型,即是 ...

  6. jsonp的原理及其使用

    原理: 1.创建script标签 2.src远程地址 3.返回的数据必须为js格式 1.因为浏览器处于安全原因不允许跨域请求,但是允许跨域倒入js文件,所以需要创建script标签 2.src远程地址 ...

  7. 【bzoj3670】: [Noi2014]动物园 字符串-kmp-倍增

    [bzoj3670]: [Noi2014]动物园 一开始想的是按照kmp把fail算出来的同时就可以递推求出第i位要f次可以跳到-1 然后把从x=i开始顺着fail走,走到fail[x]*2<i ...

  8. php代码审计9审计反序列化漏洞

    序列化与反序列化:序列化:把对象转换为字节序列的过程称为对象的序列化反序列化:把字节序列恢复为对象的过程称为对象的反序列化 漏洞成因:反序列化对象中存在魔术方法,而且魔术方法中的代码可以被控制,漏洞根 ...

  9. json_decode转换数组过程中,结果为null处理办法,百分之百有效

    json_decode这个函数是json_encode的反函数,一般传递数据的时候为了压缩数据,会将数组格式的数据转换成json格式,用到的函数就是json_encode,然后接收到数据之后再用jso ...

  10. 从图片中提取html格式的布局

    制作界面的自动化 意义:对于程序设计人员来说,比较痛苦的是制作界面.从设计人员发送的稿件(通常为jpg格式),到完成html的布局,需要将图像转化为div标记,自动化这一过程十分有意义 1.设计一个工 ...