asp.net 带复选框的treeview,如何在勾选复选框的时候选中对应的节点

那一份抹不去的光辉 2014-05-20 02:22:12
asp.net 带复选框的treeview,发现勾选节点对应的复选框的时候,并没有选中对应节点,还要在节点上点击一下才会选中对应节点。如何在勾选复选框的时候选中对应的节点,
...全文
245 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 lp244392323 的回复:
[quote=引用 3 楼 apollokk 的回复:] 单击复选框时用JS模拟单击链接:

function CheckEvent() {
        var objNode = event.srcElement;
        if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
            return;
       objNode.nextSibling.click();       
    }
麻烦帮我再看看这个,还有100分 http://bbs.csdn.net/topics/390792371[/quote] 不好意思,链接错了 ,应该是这个 http://bbs.csdn.net/topics/390792208
  • 打赏
  • 举报
回复
引用 3 楼 apollokk 的回复:
单击复选框时用JS模拟单击链接:

function CheckEvent() {
        var objNode = event.srcElement;
        if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
            return;
       objNode.nextSibling.click();       
    }
麻烦帮我再看看这个,还有100分 http://bbs.csdn.net/topics/390792371
  • 打赏
  • 举报
回复
引用 3 楼 apollokk 的回复:
单击复选框时用JS模拟单击链接:

function CheckEvent() {
        var objNode = event.srcElement;
        if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
            return;
       objNode.nextSibling.click();       
    }
看样子我要好好看下js,学习了,谢谢
Hello World, 2014-05-20
  • 打赏
  • 举报
回复
单击复选框时用JS模拟单击链接:

function CheckEvent() {
        var objNode = event.srcElement;
        if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
            return;
       objNode.nextSibling.click();       
    }
  • 打赏
  • 举报
回复
引用 1 楼 apollokk 的回复:
1、附加点击事件:
TreeView1.Attributes.Add("onclick", "CheckEvent()");
2、JS脚本:

    function public_GetParentByTagName(element, tagName) {
        var parent = element.parentNode;
        var upperTagName = tagName.toUpperCase();
        //如果这个元素还不是想要的tag就继续上溯 
        while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;
        }
        return parent;
    }

    //设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问 
    function setParentChecked(objNode) {
        var objParentDiv = public_GetParentByTagName(objNode, "div");
        if (objParentDiv == null || objParentDiv == "undefined") {
            return;
        }
        var objID = objParentDiv.getAttribute("ID");
        objID = objID.substring(0, objID.indexOf("Nodes"));
        objID = objID + "CheckBox";
        var objParentCheckBox = document.getElementById(objID);
        if (objParentCheckBox == null || objParentCheckBox == "undefined") {
            return;
        }
        if (objParentCheckBox.tagName != "INPUT" && objParentCheckBox.type == "checkbox")
            return;
        objParentCheckBox.checked = true;
        setParentChecked(objParentCheckBox);
    }

    //设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问 
    function setChildUnChecked(divID) {
        var objchild = divID.children;
        var count = objchild.length;
        for (var i = 0; i < objchild.length; i++) {
            var tempObj = objchild[i];
            if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
                tempObj.checked = false;
            }
            setChildUnChecked(tempObj);
        }
    }

    //设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问 
    function setChildChecked(divID) {
        var objchild = divID.children;
        var count = objchild.length;
        for (var i = 0; i < objchild.length; i++) {
            var tempObj = objchild[i];
            if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
                tempObj.checked = true;
            }
            setChildChecked(tempObj);
        }
    }

    //触发事件 
    function CheckEvent() {
        var objNode = event.srcElement;
        if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
            return;
        if (objNode.checked == true) {
            setParentChecked(objNode);
            var objID = objNode.getAttribute("ID");
            var objID = objID.substring(0, objID.indexOf("CheckBox"));
            var objParentDiv = document.getElementById(objID + "Nodes");
            if (objParentDiv == null || objParentDiv == "undefined") {
                return;
            }
            setChildChecked(objParentDiv);
        }
        else {
            var objID = objNode.getAttribute("ID");
            var objID = objID.substring(0, objID.indexOf("CheckBox"));
            var objParentDiv = document.getElementById(objID + "Nodes");
            if (objParentDiv == null || objParentDiv == "undefined") {
                return;
            }
            setChildUnChecked(objParentDiv);
        }
    }
还有点问题,点击取消时上级不会取消,没有半选状态
非常感谢大哥这么有心,我看了,这个是逐级的递归,也许您没有看清楚或者没有理解我问的问题,是要勾选复选框后,对应的刚刚选中的那个树形的节点也被选中(激活当前节点)。不然我在TreeNodeCheckChanged事件里面获取不到刚刚勾选的这个节点,获取的 是null, TreeNode tn = TreeMenue.SelectedNode 结果tn是null,;然后后面的代码就执行不下去了。
Hello World, 2014-05-20
  • 打赏
  • 举报
回复
1、附加点击事件:
TreeView1.Attributes.Add("onclick", "CheckEvent()");
2、JS脚本:

    function public_GetParentByTagName(element, tagName) {
        var parent = element.parentNode;
        var upperTagName = tagName.toUpperCase();
        //如果这个元素还不是想要的tag就继续上溯 
        while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
            parent = parent.parentNode ? parent.parentNode : parent.parentElement;
        }
        return parent;
    }

    //设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问 
    function setParentChecked(objNode) {
        var objParentDiv = public_GetParentByTagName(objNode, "div");
        if (objParentDiv == null || objParentDiv == "undefined") {
            return;
        }
        var objID = objParentDiv.getAttribute("ID");
        objID = objID.substring(0, objID.indexOf("Nodes"));
        objID = objID + "CheckBox";
        var objParentCheckBox = document.getElementById(objID);
        if (objParentCheckBox == null || objParentCheckBox == "undefined") {
            return;
        }
        if (objParentCheckBox.tagName != "INPUT" && objParentCheckBox.type == "checkbox")
            return;
        objParentCheckBox.checked = true;
        setParentChecked(objParentCheckBox);
    }

    //设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问 
    function setChildUnChecked(divID) {
        var objchild = divID.children;
        var count = objchild.length;
        for (var i = 0; i < objchild.length; i++) {
            var tempObj = objchild[i];
            if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
                tempObj.checked = false;
            }
            setChildUnChecked(tempObj);
        }
    }

    //设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问 
    function setChildChecked(divID) {
        var objchild = divID.children;
        var count = objchild.length;
        for (var i = 0; i < objchild.length; i++) {
            var tempObj = objchild[i];
            if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
                tempObj.checked = true;
            }
            setChildChecked(tempObj);
        }
    }

    //触发事件 
    function CheckEvent() {
        var objNode = event.srcElement;
        if (objNode.tagName != "INPUT" || objNode.type != "checkbox")
            return;
        if (objNode.checked == true) {
            setParentChecked(objNode);
            var objID = objNode.getAttribute("ID");
            var objID = objID.substring(0, objID.indexOf("CheckBox"));
            var objParentDiv = document.getElementById(objID + "Nodes");
            if (objParentDiv == null || objParentDiv == "undefined") {
                return;
            }
            setChildChecked(objParentDiv);
        }
        else {
            var objID = objNode.getAttribute("ID");
            var objID = objID.substring(0, objID.indexOf("CheckBox"));
            var objParentDiv = document.getElementById(objID + "Nodes");
            if (objParentDiv == null || objParentDiv == "undefined") {
                return;
            }
            setChildUnChecked(objParentDiv);
        }
    }
还有点问题,点击取消时上级不会取消,没有半选状态

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧