ztree.js 实现下拉单选和多选的例子

       工作要实现一个多层级的,只能选则最底层的一个需求。select 满足不了要求。就花了一些时间。利用 ztree 做了一下联动。效果勉强满意。大家可以借鉴一下。

 

 

  <!-- jq -->
  <script type="text/javascript" src="jquery/jquery.min.js"></script>
  
  <!-- bootstrap -->
  <link rel="stylesheet" href="bootstrap/css/bootstrap.css" type="text/css">
  <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
  
  <!-- ztree -->
  <link rel="stylesheet" href="ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">
  <script type="text/javascript" src="ztree/js/jquery.ztree.all-3.5.js"></script>

 层级数据

var tmp_arr = [
	
	{id:1, pId:0, name: "父节点1"},
	{id:2, pId:0, name: "父节点2"},
	
	{id:11, pId:1, name: "子节点11"},
	{id:12, pId:1, name: "子节点12"},
	{id:13, pId:1, name: "子节点13"},
	{id:14, pId:1, name: "子节点14"},
	{id:15, pId:1, name: "子节点15"},
	
	{id:1131, pId:11, name: "三级节点1131"},
	{id:1132, pId:11, name: "三级节点1132"},
	{id:1133, pId:11, name: "三级节点1133"},
	
	{id:1231, pId:12, name: "三级节点1231"},
	{id:1232, pId:12, name: "三级节点1232"},
	{id:1233, pId:12, name: "三级节点1233"},
	
	{id:1331, pId:13, name: "三级节点1331"},
	{id:1332, pId:13, name: "三级节点1332"},
	{id:1333, pId:13, name: "三级节点1333"},
	
	{id:1431, pId:14, name: "三级节点1431"},
	{id:1432, pId:14, name: "三级节点1432"},
	{id:1433, pId:14, name: "三级节点1433"},
	
	{id:1531, pId:15, name: "三级节点1531"},
	{id:1532, pId:15, name: "三级节点1532"},
	{id:1533, pId:15, name: "三级节点1533"},
	
	
	{id:21, pId:2, name: "子节点21"},
	{id:22, pId:2, name: "子节点22"},
	{id:23, pId:2, name: "子节点23"},
	
	{id:2131, pId:21, name: "三级节点2131"},
	{id:2132, pId:21, name: "三级节点2132"},
	{id:2133, pId:21, name: "三级节点2133"},
	
];

 单选的代码块

<div class="form-group tree-group mb-4 clearfix">
						<label class="col-sm-2 control-label">
							单选:
						</label>
						<div class="col-sm-9">
							<div class="input-group input-group-tree focused">
									<!-- 输入框 -->
									<input type="text" class="form-control long cursor-def JS_show_top_tree" name="top_name" value="" placeholder="请选择" readonly="readonly">
									<input type="hidden" name="top_id" value="">
									<script>
										var top_name = $('input[name="top_name"]');
										var top_id   = $('input[name="top_id"]');
									</script>
									<!-- 清除按钮 -->
									<div class="clear_tree JS_clear_top_tree">
										<i>清除</i>
									</div>
									
									<!-- 树状结构 -->
									<div class="ztree_wp JS_top_tree">
										<ul id="topZtree" class="ztree"></ul>
										<div class="close_tree JS_close_top_tree">
											<i>X</i>
										</div>
									</div>
								
							</div>
							<script type="text/javascript">
								$(function() {
									
									var setting = {
										check: {
											enable: true
										},
										view: {
											dblClickExpand: false,
											showLine: true,
											selectedMulti: false
										},
										data: {
											simpleData: {
												enable:true,
												idKey: "id",
												pIdKey: "pId",
												rootPId: ""
											}
										},
										callback: {
											beforeClick: function(treeId, treeNode) {
												var zTree = $.fn.zTree.getZTreeObj("topZtree");
												if (treeNode.isParent) {
													// 点击选中的父节点
													zTree.expandNode(treeNode);
													return false;
												} else {
													// 当前选中执行取消
													if(treeNode.checked){
														// 选中的子节点
														treeNode.checked = false;
														zTree.updateNode(treeNode);
														top_name.val('');
														top_id.val('');
													}else{
													// 当前取消执行选中
														zTree.checkAllNodes(false);
														// 选中的子节点
														treeNode.checked = true;
														zTree.updateNode(treeNode);
														top_name.val(treeNode.name);
														top_id.val(treeNode.id);
													}
													return true;
												}
											},
											beforeCheck : function(treeId, treeNode) {
												var zTree = $.fn.zTree.getZTreeObj("topZtree");
												zTree.checkAllNodes(false);
												return true;
											},
											onCheck : function(e, treeId, treeNode) {
												console.log("当前被选择的节点:");
												console.log(treeNode);
												top_name.val(treeNode.name);
												top_id.val(treeNode.id);
											}
										}
									};
									// 实例化数据
									$.fn.zTree.init($("#topZtree"), setting, tmp_arr);
									
									//禁用或者 隐藏 所有父节点 的checkbox
									var zTree = $.fn.zTree.getZTreeObj("topZtree");
									var nodes = zTree.transformToArray(zTree.getNodes());
									for (var i=0; i<nodes.length; i++) {
										if (nodes[i].isParent){
											
											//这里选择的是禁用
											//zTree.setChkDisabled(nodes[j], true);
											
											// 或者选择 隐藏
											nodes[i].nocheck = true;
											zTree.updateNode(nodes[i]);
										}
									}
									
								});
								// 点击显示弹层
								$(document).on('click','.JS_show_top_tree',function(){
									$('.JS_bottom_tree').hide()
									var is_show = $('.JS_top_tree').css('display');
									if(is_show == 'none'){
										$('.JS_top_tree').show()
									}else{
										$('.JS_top_tree').hide()
									}
								})
								// 点击关闭弹层柱状图
								$(document).on('click','.JS_close_top_tree',function(){
									$('.JS_top_tree').hide()
								})
								
								// 点击清除单选
								$(document).on('click','.JS_clear_top_tree',function(){
									var zTree = $.fn.zTree.getZTreeObj("topZtree");
									zTree.checkAllNodes(false);
									top_name.val('');
									top_id.val('');
								})
								
							</script>
						</div>
					</div>

 多选的代码

<div class="form-group tree-group mb-4 clearfix">
						<label class="col-sm-2 control-label">
							多选:
							<br>
							<span class="jianyi">(最多选4项)</span>
						</label>
						<div class="col-sm-9">
							<div class="input-group input-group-tree">

								<!----国家网络平台分类---->
									<input type="text" class="form-control long cursor-def JS_show_bottom_tree" name="names" value="" placeholder="最多选4项" readonly="readonly">
									<input type="hidden" name="ids" value="">
									<script>
										var names = $('input[name="names"]');
										var ids = $('input[name="ids"]');
									</script>
									<div class="clear_tree JS_clear_bottom_tree">
										<i>清除</i>
									</div>

								<div class="ztree_wp JS_bottom_tree">
									<ul id="bottomZtree" class="ztree yqfl_ztree "></ul>
									<div class="close_tree JS_close_bottom_tree">
										<i>X</i>
									</div>
								</div>
							</div>
							
							
							<script type="text/javascript">
							
								$(function() {
									
									var bottomSetting = {
										check: {
											enable: true
										},
										view: {
											dblClickExpand: false,
											showLine: true,
											selectedMulti: false
										},
										data: {
											simpleData: {
												enable:true,
												idKey: "id",
												pIdKey: "pId",
												rootPId: ""
											}
										},
										callback: {
											
											beforeClick: function(treeId, treeNode) {
												var zTree = $.fn.zTree.getZTreeObj("bottomZtree");
												
												if (treeNode.isParent) {
													// 点击选中的父节点
													zTree.expandNode(treeNode);
													return false;
												} else {
													
													var checkCount = zTree.getCheckedNodes(true).length,
													nocheckCount = zTree.getCheckedNodes(false).length,
													changeCount = zTree.getChangeCheckedNodes().length;
													
													console.log(checkCount);
													var is_checked = treeNode.checked;
													 if(is_checked){
														treeNode.checked = false;
														zTree.updateNode(treeNode);
														_initChecked(zTree);
													 }else  if(checkCount < 4){
														treeNode.checked = true;
														zTree.updateNode(treeNode);
														_initChecked(zTree);
													 }else{
														 alert('只能选择4个!')
													 }
													 
													 return true;
												}
											},
											beforeCheck : function(treeId, treeNode) {
												var zTree = $.fn.zTree.getZTreeObj("bottomZtree");
												console.log(treeNode);
												
												if (treeNode.isParent) {
													// 点击选中的父节点
													zTree.expandNode(treeNode);
													return false;
												} else {
													
													var checkCount = zTree.getCheckedNodes(true).length;
													if(checkCount >= 4 && !is_checked ){
														 alert('只能选择4个!')
														 return false;
													 }
													 return true;
												}
											},
											onCheck : function(e, treeId, treeNode) {
												var zTree = $.fn.zTree.getZTreeObj("bottomZtree");
												_initChecked(zTree);
											}
										}
									}
									// 实例化数据
									var zTree = $.fn.zTree.init($("#bottomZtree"), bottomSetting, tmp_arr);
									
									//禁用或者 隐藏 所有父节点 的checkbox
									var zTree = $.fn.zTree.getZTreeObj("bottomZtree");
									var nodes = zTree.transformToArray(zTree.getNodes());
									for (var i=0; i<nodes.length; i++) {
										if (nodes[i].isParent){
											
											//这里选择的是禁用
											//zTree.setChkDisabled(nodes[j], true);
											
											// 或者选择 隐藏
											nodes[i].nocheck = true;
											zTree.updateNode(nodes[i]);
										}
									}
									
								});
								
								function _initChecked(obj){
									
									var checkedNodes = obj.getCheckedNodes(true);
									console.log(checkedNodes);
									var tmp_ids = [];
									var tmp_names = []
									checkedNodes.forEach(function(item){
										console.log(item);
										tmp_ids.push(item.id);
										tmp_names.push(item.name);
									})
									var last_ids = tmp_ids.join("|")
									var last_names = tmp_names.join("|")
									names.val(last_names);
									ids.val(last_ids);
								}
							
								// 显示学科领取弹层
								$(document).on('click','.JS_show_bottom_tree',function(){
									$('.JS_top_tree').hide()
									var is_show = $('.JS_bottom_tree').css('display');
									if(is_show == 'none'){
										$('.JS_bottom_tree').show()
									}else{
										$('.JS_bottom_tree').hide()
									}
								})
								// 关闭学科领取弹层
								$(document).on('click','.JS_close_bottom_tree',function(){
									$('.JS_bottom_tree').hide()
								})
								// 点击清除
								$(document).on('click','.JS_clear_bottom_tree',function(){
									names.val('');
									ids.val('');
									var zTree = $.fn.zTree.getZTreeObj("bottomZtree");
									zTree.checkAllNodes(false);
								})

							</script>
						</div>
					</div>

附带一下下载链接

select多层级选择。利用ztree.js实现下拉框的多选和单选demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值