ztree自定义单选框

在 ZTree 插件中实现单选框功能并处理父子节点联动操作,当选择子节点时,父节点自动选中;反之,取消父节点选中则子节点也取消选中。通过 HTML 代码配置,可以达到单选和父子节点操作关联的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用ztree插件单选框时,有时需要父子节点操作关联,由于单选框特性,ztree并没有提供相关的功能,那么该如何实现选中子节点时,父节点自动变成选中状态,而父节点取消选中时,子节点也取消选中呢?

html代码

<span style="font-weight:bold;font-size:15px;">区域选择:</span>
                   		<input type="text" id="citySel" onclick="showMenu()" readonly="readonly" placeholder="请选择区域" style="width:180px;font-weight:bold;"/>
                        <input type="text" id="parent_layer_idx" style="display:none;"/>
                        <div id="menuContent" style="display:none; position:absolute;background:#eee;overflow: auto;margin-top:40px;margin-left:83px;z-index:999">
                        	<ul id="treeDemo" class="ztree" style="margin-top:0; width:180px; height: 300px;"></ul>
                        </div>
js代码

 //加载树形结构
        $.fn.zTree.init($("#treeDemo"), setting);

//初始化树形结构
var setting = {
        async: {
            enable: true,
            url: ContentRoot + "system/queryTreeNode4BAllBLayerAction.do",
            dataFilter: filter
        },
        check: {
            enable: true,
            chkStyle: "checkbox",
            chkboxType:{ "Y" : "p", "N" : "s" }
           
        },
        view: {
            dblClickExpand: false,
            showIcon: false
        },
        data: {
            simpleData: {
                enable: true,
                idKey: "n_id",
                pIdKey: "p_id",
                rootPId: "-1"
            }
        },
        callback: {
        	beforeCheck: onChangeSel,
            onClick: onClick,
            onCheck: onCheck
        }
    };

function filter(treeId, parentNode, responseData) {

    return eval("(" + responseData.jsonString + ")");
}
//自定义单选框
function onChangeSel(treeId, treeNode)
{ 
	if(treeNode.checked){
		return;
	}
	var zTree = $.fn.zTree.getZTreeObj("treeDemo");
	var nodes=zTree.getCheckedNodes(true); 
	$.each(nodes,function(i,n){ 
		n.checked=false; 
		}); 
	zTree.refresh();
}

function onClick(e, treeId, treeNode) {
    var zTree = $.fn.zTree.getZTreeObj("treeDemo");
    zTree.checkNode(treeNode, !treeNode.checked, null, true);
    return false;
}

function onCheck(e, treeId, treeNode) {
    var zTree = $.fn.zTree.getZTreeObj("treeDemo");
    nodes = zTree.getCheckedNodes(true);
    v = "";
    id = "";
    for (var i = 0, l = nodes.length; i < l; i++) {
        v += nodes[i].name + ",";
        id += nodes[i].n_id + ",";
    }
    if (v.length > 0) v = v.substring(0, v.length - 1);
    var cityObj = $("#citySel");
    cityObj.attr("value", v);
    $("#citySel").val(v);
    if (id.length > 0) {
        $("#parent_layer_idx").val(id.substring(1, id.length - 1));
        //$("#parent_type").val(id.substring(0, 1));
    }
}

function showMenu() {
    var cityObj = $("#citySel");
    var cityOffset = $("#citySel").offset();
    $("#menuContent").css({
        left: (cityOffset.left - cityOffset.width) + "px",
        top: (cityOffset.top - 45) + "px"
    }).slideDown("fast");

    $("body").bind("mousedown", onBodyDown);
}

function hideMenu() {
    $("#menuContent").fadeOut("fast");
    $("body").unbind("mousedown", onBodyDown);
}

function onBodyDown(event) {
    if (!(event.target.id == "menuBtn" || event.target.id == "citySel" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length > 0)) {
        hideMenu();
    }
}

效果



这样,在选择不同父节点或子节点时,为单选,并且在选定一个节点时,其父子节点的操作也是关联的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值