asp.net TreeView的复选框的选择 [英] asp.net treeview checkbox selection

查看:127
本文介绍了asp.net TreeView的复选框的选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个父节点。每个父节点包含子节点的列表。我showcheckboxes设置为所有。

我的问题:

在客户端,当我检查父节点 - 我怎么能检查所有的子节点而不做回发或用ajax。

问候


解决方案

  tv.Attributes.Add(onclick事件,OnTreeClick(事件));

添加此JavaScript code

 < SCRIPT LANGUAGE =JavaScript的类型=文/ JavaScript的>
    功能OnTreeClick(EVT){
        变种SRC = window.event!= window.undefined? window.event.srcElement:evt.target;
        VAR isChkBoxClick =(src.tagName.toLowerCase()==输入&放大器;&安培; src.type ==复选框);
        如果(isChkBoxClick){
            VAR parentTable = GetParentByTagName(表,SRC);
            VAR nxtSibling = parentTable.nextSibling;
            如果(nxtSibling&安培;&安培; nxtSibling.nodeType == 1)//检查是否NXT兄弟不为空&安培;是元素节点
            {
                如果(nxtSibling.tagName.toLowerCase()==格),如果节点有孩子//
                {
                    //检查或各级取消儿童
                    CheckUncheckChildren(parentTable.nextSibling,src.checked);
                }
            }
            //检查或各级取消父母
            CheckUncheckParents(SRC,src.checked);
        }
    }    功能CheckUncheckChildren(c​​hildContainer,检查){
        VAR childChkBoxes = childContainer.getElementsByTagName(输入);
        VAR childChkBoxCount = childChkBoxes.length;
        对于(VAR I = 0; I< childChkBoxCount;我++){
            childChkBoxes [I] .checked =检查;
        }
    }    功能CheckUncheckParents(srcChild,检查){
        VAR parentDiv = GetParentByTagName(格,srcChild);
        。VAR parentNodeTable = parentDiv previousSibling;        如果(parentNodeTable){
            VAR checkUncheckSwitch;            如果(检查)//选中复选框
            {
                VAR isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
                如果(isAllSiblingsChecked)
                    checkUncheckSwitch = TRUE;
                其他
                    返回; //不需要检查父若有(一个或多个)孩子没有检查
            }
            否则//复选框取消选中
            {
                checkUncheckSwitch = FALSE;
            }            VAR inpElemsInParentTable = parentNodeTable.getElementsByTagName(输入);
            如果(inpElemsInParentTable.length大于0){
                变种parentNodeChkBox = inpElemsInParentTable [0];
                parentNodeChkBox.checked = checkUncheckSwitch;
                //做同样的递归
                CheckUncheckParents(parentNodeChkBox,checkUncheckSwitch);
            }
        }
    }    功能AreAllSiblingsChecked(chkBox){
        VAR parentDiv = GetParentByTagName(格,chkBox);
        VAR childCount = parentDiv.childNodes.length;
        对于(VAR I = 0; I< childCount;我++){
            如果(parentDiv.childNodes [I] .nodeType == 1)//检查子节点是元素节点
            {
                如果(parentDiv.childNodes [I] .tagName.toLowerCase()==表){
                    VAR prevChkBox = parentDiv.childNodes [I] .getElementsByTagName(输入)[0];
                    //如果有兄弟节点的不检查,返回false
                    如果(!prevChkBox.checked){
                        返回false;
                    }
                }
            }
        }
        返回true;
    }    //效用函数来获取通过标记名的元素的所述容器
    功能GetParentByTagName(parentTagName,childElementObj){
        VAR父= childElementObj.parentNode;
        而(parent.tagName.toLowerCase()!= parentTagName.toLowerCase()){
            父= parent.parentNode;
        }
        回到父母;
    }< / SCRIPT>

I have several parent nodes. Each parent nodes contains a list of child nodes. My showcheckboxes are set to all.

My question :

On the client side, when I check the parent node - how can I check all the child nodes without doing a post back or using ajax.

Regards

解决方案

tv.Attributes.Add("onclick", "OnTreeClick(event)");

Add this javascript code

<script language="javascript" type="text/javascript">
    function OnTreeClick(evt) {
        var src = window.event != window.undefined ? window.event.srcElement : evt.target;
        var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
        if (isChkBoxClick) {
            var parentTable = GetParentByTagName("table", src);
            var nxtSibling = parentTable.nextSibling;
            if (nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node
            {
                if (nxtSibling.tagName.toLowerCase() == "div") //if node has children
                {
                    //check or uncheck children at all levels
                    CheckUncheckChildren(parentTable.nextSibling, src.checked);
                }
            }
            //check or uncheck parents at all levels
            CheckUncheckParents(src, src.checked);
        }
    }

    function CheckUncheckChildren(childContainer, check) {
        var childChkBoxes = childContainer.getElementsByTagName("input");
        var childChkBoxCount = childChkBoxes.length;
        for (var i = 0; i < childChkBoxCount; i++) {
            childChkBoxes[i].checked = check;
        }
    }

    function CheckUncheckParents(srcChild, check) {
        var parentDiv = GetParentByTagName("div", srcChild);
        var parentNodeTable = parentDiv.previousSibling;

        if (parentNodeTable) {
            var checkUncheckSwitch;

            if (check) //checkbox checked
            {
                var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
                if (isAllSiblingsChecked)
                    checkUncheckSwitch = true;
                else
                    return; //do not need to check parent if any(one or more) child not checked
            }
            else //checkbox unchecked
            {
                checkUncheckSwitch = false;
            }

            var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
            if (inpElemsInParentTable.length > 0) {
                var parentNodeChkBox = inpElemsInParentTable[0];
                parentNodeChkBox.checked = checkUncheckSwitch;
                //do the same recursively
                CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
            }
        }
    }

    function AreAllSiblingsChecked(chkBox) {
        var parentDiv = GetParentByTagName("div", chkBox);
        var childCount = parentDiv.childNodes.length;
        for (var i = 0; i < childCount; i++) {
            if (parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node
            {
                if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {
                    var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
                    //if any of sibling nodes are not checked, return false
                    if (!prevChkBox.checked) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    //utility function to get the container of an element by tagname
    function GetParentByTagName(parentTagName, childElementObj) {
        var parent = childElementObj.parentNode;
        while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
            parent = parent.parentNode;
        }
        return parent;
    }

</script>

这篇关于asp.net TreeView的复选框的选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆