zTree之checkbox选中事件---获取状态改变的结点


zTree 简介

    zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。
    zTree 是开源免费的软件(MIT 许可证)。如果您对 zTree 感兴趣或者愿意资助 zTree 继续发展下去,可以进行捐助。

主页:http://www.ztree.me

我要实现的是一个基于ztree的树状列表,如下图所示:

各个列表项用checkbox控制,可以选择或取消选择。

通过checkbox控制各个地图图层的显示与隐藏。


实现过程:

照搬demo\cn\excheck\checkbox.html里面的代码

重点一:

setting 加上回调函数 zTreeOnCheck,对checkbox的点击进行响应。

重点二:

setting.check.chkboxType = { "Y" : "s", "N" : "s" };
Y指的是勾选checkbox的时候对父结点或子结点产生的影响
N指的是取消checkbox的时候对父结点或子结点产生的影响
大小写是有区另的。s指子结点,p指父结点

重点三:

zNodes中的数据自行输入,pId控制这个子结点的父结点是哪个。icon可以自定义。

重点四:

clearCheckedOldNodes要在onCheck响应函数中执行一遍。
如下是其API中的解释。
(如果需要获取每次操作后全部被改变勾选状态的节点数据,请在每次勾选操作后,遍历所有被改变勾选状态的节点数据,让其 checkedOld = checked 就可以了。)
如果不这样,会出现第2次点击checkbox不产生onCheck的响应。
参见demo\cn\excheck\checkbox_count.html文件。



重点五:得到改变状态的checkbox


var zTree = $.fn.zTree.getZTreeObj("treeWaterLayer");//换成实际的图层的id
var changedNodes = zTree.getChangeCheckedNodes(); //获取改变的全部结点
for ( var i=0 ; i < changedNodes.length ; i++ ){
	var treeNode = changedNodes[i];
	console.log((treeNode?treeNode.name:"root") + "checked " +(treeNode.checked?"true":"false"));
	}

详细代码如下所示:


	<SCRIPT type="text/javascript">
		//<!--
		var setting = {
			check: {
				enable: true
			},
			data: {
				simpleData: {
					enable: true
				}
			},
			callback: {
				onCheck: zTreeOnCheck
			},
			view: {
				selectedMulti: false
			}
		};
		setting.check.chkboxType = { "Y" : "s", "N" : "s" };
		//Y 属性定义 checkbox 被勾选后的情况; 
		//N 属性定义 checkbox 取消勾选后的情况; 
		//"p" 表示操作会影响父级节点; 
		//"s" 表示操作会影响子级节点。
		
		var zNodes =[
			{ id:1, pId:0, name:"水资源分区", open:true},
			{ id:10, pId:1, name:"河流", checked:true, open:true},
			{ id:11, pId:1, name:"湖泊", checked:true},
			{ id:2, pId:1, name:"水库", checked:true, open:true},
			{ id:21, pId:2, name:"大一型水库", checked:true, open:true},
			{ id:22, pId:2, name:"大二型水库", checked:true},
			{ id:23, pId:2, name:"中型水库", checked:true, icon:"./images/car1.png"},
			{ id:24, pId:2, name:"小一型水库", checked:true, icon:"./images/car2.png"},
			{ id:25, pId:2, name:"小二型水库", checked:true},
			{ id:3, pId:1, name:"大坝", checked:true, open:true},
			{ id:31, pId:3, name:"一级堤防", checked:true},
			{ id:32, pId:3, name:"二级堤防", checked:true},
			{ id:33, pId:3, name:"三级堤防", checked:true},
			{ id:34, pId:3, name:"四级堤防", checked:true},
			{ id:35, pId:3, name:"未分级堤防", checked:true},
			{ id:4, pId:0, name:"世界地图", checked:true},
			{ id:5, pId:0, name:"世界地图_Night", checked:true},
		];
		
		function zTreeOnCheck(event, treeId, treeNode) {
			//var checked = treeNode.checked;
			//console.log((treeNode?treeNode.name:"root") + "checked " +(checked?"true":"false"));
			refreshLayers();
			clearCheckedOldNodes();
		};
		//刷新图层的显示情况
		var layers;
		function refreshLayers() {
			var zTree = $.fn.zTree.getZTreeObj("treeWaterLayer");
			var changedNodes = zTree.getChangeCheckedNodes();
			for ( var i=0 ; i < changedNodes.length ; i++ ){
				var treeNode = changedNodes[i];
				layers = map.getLayersByName(treeNode.name);
				if(layers!=null && layers[0]!=null){
					layers[0].setVisibility(treeNode.checked);
				}
					
				console.log((treeNode?treeNode.name:"root") + "checked " +(treeNode.checked?"true":"false"));				
			}
		}
		//清理善后工作
		function clearCheckedOldNodes() {
			var zTree = $.fn.zTree.getZTreeObj("treeWaterLayer"),
			nodes = zTree.getChangeCheckedNodes();
			for (var i=0, l=nodes.length; i<l; i++) {
				nodes[i].checkedOld = nodes[i].checked;
			}
		};		
		$(document).ready(function(){
			$.fn.zTree.init($("#treeWaterLayer"), setting, zNodes);
		});
		//-->
	</SCRIPT>

在html中就是写一个div

			<div class="zTreeDemoBackground left" align="right" style="overflow-y:auto;height:400px;">
				<ul id="treeWaterLayer" class="ztree"></ul>
			</div>



重点五:得到改变状态的checkbox

var zTree = $.fn.zTree.getZTreeObj("treeWaterLayer");
var changedNodes = zTree.getChangeCheckedNodes();
for ( var i=0 ; i < changedNodes.length ; i++ ){
	var treeNode = changedNodes[i];
	console.log((treeNode?treeNode.name:"root") + "checked " +(treeNode.checked?"true":"false"));
	}



-------------------
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ztree-input是一个通过使用zTree插件实现的下拉菜单功能。根据引用[1]中提供的代码,ztree-input的实现方式是通过在页面上添加一个input框,并绑定一个点击事件来显示下拉菜单。当点击input框时,会触发事件函数"showTree()",该函数会将zTree树状图显示在input框下方。同时,通过点击input框右侧的倒三角图标,可以收起或展开下拉菜单。在下拉菜单中选择相应的选项后,选中的值会存储在一个隐藏的input框中,供后续的处理使用。这样实现了一个具有下拉功能的ztree-input。 从引用中可以看到,实现ztree-input还需要引入ztree所需的js和css文件。 最后,引用提供了一个可用的示例来实现点击input框出现下拉菜单的效果。这个示例经过亲测可用。 总结来说,ztree-input是通过使用zTree插件和一些相关的代码实现的一个具有下拉功能的输入框。用户可以点击输入框来显示一个下拉菜单,并在菜单中选择相应的选项。选中的值会存储在隐藏的input框中,方便后续处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ztree实现下拉功能 input](https://blog.csdn.net/weixin_42599079/article/details/88897426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ztree树形菜单实现点击input框下拉功能 (内附有demo)](https://blog.csdn.net/z_zhy/article/details/87938669)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [zTree 实现点击input框出现下拉菜单(亲测可用)上一版的传错了](https://download.csdn.net/download/z_zhy/10997776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值