Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框

92 篇文章 0 订阅
69 篇文章 0 订阅

Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框

Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点

EasyUI Combotree叶子节点增加单选框

 

 

================================

©Copyright 蕃薯耀 2018年4月28日

http://fanshuyao.iteye.com/

 

建议使用方式三(完美版)

 

一、方式一,最简单(只能单选叶子节点,叶子节点前面无多选框)

$("xxxId").combotree({
    data : [{……},{……},{……}],//数据省略
    required: false,
    onBeforeSelect : function(node){
        if(!$(this).tree("isLeaf", node.target)){//如果不是叶子节点,不让选择
            return false;
        }
    }
});

 

 二、方式二:控制只能选一项,选中某一项后后面不能再勾选(体验比较生硬)

$("xxxId").combotree({
    multiple : true,//设置可以多选,显示多选框,不设置不会出现多选框
    data : [{……},{……},{……}],//数据省略
    required: false,
    checkbox : true,//显示多选框
    onlyLeafCheck : true,//只在叶子节点显示多选框
    onBeforeSelect : function(node){
        if(!$(this).tree("isLeaf", node.target)){//如果不是叶子节点,不让选择
            return false;
        }
    },
    onBeforeCheck : function(node, checked){//控制只能选一项
        if(checked){//当前为选中操作
            var nodes = $(this).tree("getChecked");
            //控制只能选一项,选中某一项后后面不能再勾选
            if(nodes.length == 0){
                return true;
            }else{
                return false;
            }
        }else{//当前为取消选中操作
            return true;
        }
    }
});

 

 三、方式三:随意选择任意一项,但只能选一项(完美版)

$("xxxId").combotree({
    multiple : true,//设置可以多选,显示多选框,不设置不会出现多选框
    data : [{……},{……},{……}],//数据省略
    required: false,
    checkbox : true,//显示多选框
    onlyLeafCheck : true,//只在叶子节点显示多选框
    onBeforeSelect : function(node){
        $(this).tree("check", node.target);//控制点击文字时也能勾选
        return false;//避免不是选择勾选框而是点击文字出现黄色的选中条纹
    },
    onBeforeCheck : function(node, checked){//控制只能选一项
        if(checked){//当前为选中操作
            var nodes = $(this).tree("getChecked");
            //控制只能选一项,选中某一项后后面不能再勾选
            if(nodes.length > 0){
                for(var i=0; i<nodes.length; i++){
                    $(this).tree("uncheck", nodes[i].target);//清除之前选中的项
                }
            }
        }
    }
});

 

 

 方法三中:onBeforeSelect方法返回false,避免第一次点击文字选中后,再重新打开选择,不点击文字,直接勾选多选框,第一次点击的文字有黄色背景的情况,如下:



 

 方式四:复杂类型,EasyUI Combotree展开所有父节点和显示完整路径(2018-05-11追加)

1、根据叶子节点的值展开所有父节点

2、combotree文本显示为树的完整路径(如:衣服 > 上衣 > 皮衣),从父到子

$("#cmm_code_id").combotree({
	multiple: true,
	required : true,
	checkbox : true,
	onlyLeafCheck : true,//只能叶子节点才能勾选
	url : xxx/xxx.action",
	onBeforeSelect : function(node){
		$(this).tree("check", node.target);//控制点击文字时也能勾选
		return false;
	},
	onClick : function(node){//控制点击文字时,显示全路径
		$("#cmm_code_id").combotree("setText", getCombotreePathNames("cmm_code_id", node.id));
	},
	onBeforeCheck : function(node, checked){
		if(checked){//如果是勾选操作,则把之前选中的节点清除(不勾选)
			var nodes = $(this).tree("getChecked");
			if(nodes.length > 0){
				for(var i=0; i<nodes.length; i++){
					$(this).tree("uncheck", nodes[i].target);
				}
			}
		}
	},
	onCheck : function(node, checked){
		if(checked){
			$("#cmm_code_id").combotree("setText", getCombotreePathNames("cmm_code_id", node.id));
		}
	},
	onLoadSuccess : function(node, data){
		var cmm_code_id_value = "${buildingNaming.cmm_code_id}";
		if(cmm_code_id_value != null && $.trim(cmm_code_id_value) != ""){
			var combotreeId = "cmm_code_id";
			combotreeInitValueAndExpand(combotreeId, cmm_code_id_value);
			$("#"+combotreeId).combotree("setText", getCombotreePathNames(combotreeId, cmm_code_id_value));
		}
	}
});

 

/**
 * 根据叶子节点展开所有父节点
 * @param treeObj 树对象,(combotree的树对象获取:var treeObj = comboObj.combotree("tree");)
 * @param node 叶子节点
 */
function expandParent(treeObj, node){
	var parentNode = treeObj.tree("getParent", node.target);
	if(parentNode != null && parentNode != "undefined"){
		treeObj.tree("expand", parentNode.target);
		expandParent(treeObj, parentNode);
	}
};

/**
 * tree初始化赋值并展开所有父节点
 * @param treeObj 树对象
 * @param leafValue 叶子节点的值
 */
function treeInitValueAndExpand(treeObj, leafValue){
	var nodesChecked = treeObj.tree("getChecked");//获取选中的值
	if(nodesChecked.length > 0){
		for(var i=0; i<nodesChecked.length; i++){
			expandParent(treeObj, nodesChecked[i]);
		}
	}
};

/**
 * 根据叶子节点选中的值,获取树整个路径的名称
 * @param treeObj 树对象,(combotree的树对象获取:var treeObj = comboObj.combotree("tree");)
 * @param node 叶子节点
 */
function getTreePathNames(treeObj, node){
	var pathName = node.text;
	var parentNode = treeObj.tree("getParent", node.target);
	if(parentNode != null && parentNode != "undefined"){
		pathName = getTreePathNames(treeObj, parentNode) + " > " + pathName;
	}
	return pathName;
};

/**
 * 根据叶子节点选中的值,获取树整个路径的名称
 * @param combotreeId 唯一ID
 * @param leafValue 叶子节点的值
 */
function getCombotreePathNames(combotreeId, leafValue){
	var combotreeObj = $("#"+combotreeId);
	var treeObj = combotreeObj.combotree("tree");
	var nodesChecked = treeObj.tree("getChecked");//获取选中的值
	var pathName = "";
	if(nodesChecked.length > 0){
		for(var i=0; i<nodesChecked.length; i++){
			pathName += getTreePathNames(treeObj, nodesChecked[i]);
		}
	}
	return pathName;
};



/**
 * combotree初始化赋值并展开所有父节点
 * @param combotreeId 唯一ID
 * @param leafValue 叶子节点的值
 */
function combotreeInitValueAndExpand(combotreeId, leafValue){
	var combotreeObj = $("#"+combotreeId);
	var treeObj = combotreeObj.combotree("tree");
	combotreeObj.combotree("setValue", leafValue);//赋值
	treeInitValueAndExpand(treeObj, leafValue);
};

 

效果如下:

1、默认显示完整路径


 

2、默认根据叶子节点的值赋值,并从该子结点逐层向上展开所有父结点

 

(如果你觉得文章对你有帮助,欢迎捐赠,^_^,谢谢!) 


    

 

================================

©Copyright 蕃薯耀 2018年4月28日

http://fanshuyao.iteye.com/

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值