layui+ztree 树状下拉框
一、效果图
【关闭】

【展开】

二、代码
【HTML】注:布局一定要用DIV不是select否则效果····
<div class="layui-form-item">
<label class="layui-form-label" style="float:left">部门</label>
<div class="layui-input-block">
@*<select name="PDEPT_KEY" lay-filter="PDEPT_KEY" id="PDEPT_KEY" lay-search="" lay-verType="tips">
<option value="" selected></option>
</select>*@
<div name="PDEPT_KEY" lay-filter="PDEPT_KEY" id="PDEPT_KEY" class="layui-form-select select-tree" lay-search=""></div>
</div>
</div>
【js】
① 以下为固定方法
function initSelectTree(id, isMultiple, chkboxType, zNodes) {
var setting = {
data: {
simpleData: {
enable: true
}
},
check: {
enable: false,
chkStyle: "radio",
radioType: "all",
},
chkboxType: { "Y": "ps", "N": "ps" },
callback: {
onClick: onClick,
onCheck: onCheck
}
};
if (isMultiple) {
setting.check.enable = isMultiple;
}
if (chkboxType !== undefined && chkboxType != null) {
setting.check.chkboxType = chkboxType;
}
var html = '<div class = "layui-select-title" >' +
'<input id="' + id + 'Show"' + 'type = "text" placeholder = "请选择" value = "" class = "layui-input" readonly>' +
'<i class= "layui-edge" ></i>' +
'</div>';
$("#" + id).append(html);
$("#" + id).append('<dl class="layui-anim layui-anim-upbit" ><div class="tree-content scrollbar">' +
'<input hidden id="' + id + 'Hide" ' +
'name="' + $(".select-tree").attr("id") + '">' +
'<ul id="' + id + 'Tree" class="ztree scrollbar" style="margin-top:0;"></ul>' +
'</div></dl>');
$("#" + id).bind("click", function () {
if ($(this).parent().find(".tree-content").css("display") !== "none") {
hideMenu()
} else {
$(this).addClass("layui-form-selected");
var Offset = $(this).offset();
var width = $(this).width() - 2 - 15;
$(this).parent().find(".tree-content").css({
left: Offset.left + "px",
top: Offset.top + $(this).height() + "px",
height: 250 + "px",
}).slideDown("fast");
$(this).parent().find(".tree-content").css({
width: width,
});
$("body").bind("mousedown", onBodyDown);
}
});
$.fn.zTree.init($("#" + id + "Tree"), setting, zNodes);
hideMenu();
}
//function beforeClick(treeId, treeNode) {
// var check = (treeNode && !treeNode.isParent);
// if (!check) alert("只能选择城市...");
// return check;
//}
function onClick(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId);
if (zTree.setting.check.enable == true) {
zTree.checkNode(treeNode, !treeNode.checked, false)
assignment(treeId, zTree.getCheckedNodes());
} else {
assignment(treeId, zTree.getSelectedNodes());
hideMenu();
}
}
function onCheck(event, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj(treeId);
assignment(treeId, zTree.getCheckedNodes());
}
function hideMenu() {
$(".select-tree").removeClass("layui-form-selected");
$(".tree-content").fadeOut("fast");
$("body").unbind("mousedown", onBodyDown);
}
function assignment(treeId, nodes) {
var names = "";
var ids = "";
for (var i = 0, l = nodes.length; i < l; i++) {
names += nodes[i].name + ",";
ids += nodes[i].id + ",";
}
if (names.length > 0) {
names = names.substring(0, names.length - 1);
ids = ids.substring(0, ids.length - 1);
}
treeId = treeId.substring(0, treeId.length - 4);
$("#" + treeId + "Show").attr("value", names);
$("#" + treeId + "Show").attr("title", names);
$("#" + treeId + "Hide").attr("value", ids);
}
function onBodyDown(event) {
if ($(event.target).parents(".tree-content").html() == null) {
hideMenu();
}
}
②以下为变动方法
Ajax("/BindCombox/GetDeptData", false, "POST", {}, function (data) {
var jsondata = JSON.parse(data);
if (jsondata.IsError) {
layer.msg("" + jsondata.ErrMsg, { icon: 5 });
} else {
zNodes = jsondata.Data;//获取数据源
initSelectTree("PDEPT_KEY", true, { "Y": "ps", "N": "s" }, zNodes);
var treeObj = $.fn.zTree.getZTreeObj("PDEPT_KEYTree");
var node = treeObj.getNodes();
treeObj.selectNode(node[0]);
treeObj.checkNode(node[0], true, true, true);
}
});
③数据源格式
[
{"id":41.0,"name":"技术二部","pId":1.0,"open":true},
{"id":42.0,"name":"技术三部","pId":null,"open":true}
]
注:设置open为true,树状菜单为展开状态
三、未实现效果问题解析
①没有引用js。ztree和layui
②布局采用select,没有使用div
③网络请求数据源不正确。
注:此方法仍存在不足之处,望有能人指点
layui+ztree 树状下拉框的更多相关文章
- 手把手教学~基于element封装tree树状下拉框
在日常项目开发中,树状下拉框的需求还是比较常见的,但是element并没有这种组件以供使用.在这里,小编就基于element如何封装一个树状下拉框做个详细的介绍. 通过这篇文章,你可以了解学习到一个树 ...
- 第二百二十七节,jQuery EasyUI,ComboTree(树型下拉框)组件
jQuery EasyUI,ComboTree(树型下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解EasyUI中ComboTree(树型下拉框)组件的使用方法,这个 ...
- ComboTree( 树型下拉框) 组件
本节课重点了解EasyUI中Tree(树)组件的使用方法, 这个组件依赖于Combo(下拉框)和 Tree(树)组件.一. 加载方式//class 加载方式<select id="cc ...
- 组件 layui 常用控件下拉框的应用
下拉框的显示样式: 针对下拉框的绑定等操作时,在最后务必调用一次 form.render(); 1.基本定义: <div class="layui-form-item"> ...
- Layui:设置select下拉框自动选中某项
1.问题:layUI,在做编辑功能有下拉框数据时,需要初始化选中某个值,layUI官网没有相关api,可能我比较笨没找到 2.解决思路:出发点击事件 3.分析dom树结构,出发dl点击事件 方法: v ...
- LayUI中实现上级下拉框动态加载下级下拉框js
js代码: var form = layui.form, layer = layui.layer; form.on("select(上级)", function(data){ va ...
- 【Layui】Layui模板引擎生成下拉框不显示
首先让我震惊了一下,layui引擎模板居然是支持ajax操作的 博主的需求是需要在数据表格内放入下拉框而下拉框的数据是数据库内查出来的(详见上一篇博客),但是下拉框怎么也显示不出来 找了四个小时的问题 ...
- IE9+的树状下拉菜单,支持多选
//JS核心代码function treeBox(Config){var el=eval(Config.el);var w=Config.width;var h=Config.height;var d ...
- 【Layui】当Layui数据表格和Layui下拉框组合时发生的问题
关于Layui数据表格用下拉框显示问题 如图所示 可以看见当点击下拉框时下拉选项被下拉框覆盖 此时你需要在数据表格渲染完成时的回调内添加如下代码即可 $(".sel_scrq"). ...
随机推荐
- 学习笔记02(随便看看mybatis源码)
两个很有名的持久层hibernate和mybatis应该很熟悉不过了,两者最大相同点是底层都是对jdbc的封装,最大的不同点是前者是自动生成sql语句,后者是需要我们在映射文件中写出sql. 其实从以 ...
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...
- C#-Xamarin的Android项目开发(一)——创建项目
创建项目 使用Xamarin开发安卓项目,首先需要安装VS2017以上版本.因为VS2017以上的版本,可以直接创建Xamarin项目. 另外用Xamarin开发安卓项目,还需要使用Intel的CPU ...
- 正向代理&反向代理 简(fu)明(za)解释
最近写的东西越来越偏向Web程序员了··· 你想读懂本篇,就要知道什么是Web服务器——装在世界上某个机房里某台机器里某个操作系统里的一个,对外(公网或者你能访问)服务各种你需要的信息的软件! 它可以 ...
- gitbook 入门教程之快速体验
本文主要介绍三种使用 gitbook 的方式,分别是 gitbook 命令行工具,Gitbook Editor 官方编辑器和 gitbook.com 官网. 总体来说,三种途径适合各自不同的人群,找到 ...
- Django模板语言相关内容
Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 在Django的模板语言中按此语法使用:{{ 变量名 ...
- Django-CSRF跨站请求伪造防护
前言 CSRF全称Cross-site request forgery(跨站请求伪造),是一种网络的攻击方式,也被称为“One Click Attack”或者Session Riding,通常缩写为C ...
- Linux iptables用法与NAT
1.相关概念 2.iptables相关用法 3.NAT(DNAT与SNAT) 相关概念 防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP ...
- Python:如何用一行代码获取上个月是几月
现在转一篇志军100发于公众号 Python之禅的文章: Python:如何用一行代码获取上个月是几月 抱歉我用了个有点标题党的标题,因为担心你错过了本文,但内容绝对干货,本文介绍的关于Python时 ...
- Java核心技术第八章——泛型程序设计(1)
1.泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用.例如:不希望为了聚集String和Integer对象分别设计不同的类.(个人觉得此处说的聚集译为:创建一个对象,属性可以为 ...