.Net TreeView 父节点checkbox控制子节点checbox

来源:互联网 发布:购物车数据库 编辑:程序博客网 时间:2024/05/14 02:35

1. 截图看看效果:

2.html结构

<div>
        <asp:TreeView ID="tvList" runat="server"  ShowCheckBoxes="All" ShowLines="True"   onclick="javascript:return postBackByObjectCheck()"/>
    </div>

3.函数解析:

//**IE下,event对象有srcElement属性,但是没有target属性;
//**Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的
function getEvent() {
    if (document.all) {
        return window.event; //如果是ie
    }
    func = getEvent.caller;
    while (func != null) {
        var arg0 = func.arguments[0];
        if (arg0) {

            if ((arg0.constructor == Event || arg0.constructor == MouseEvent)

|| (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
                return arg0;
            }
        }
        func = func.caller;
    }
    return null;
}

function postBackByObjectCheck() {
            var evt = getEvent();//**call method
            var o = evt.srcElement || evt.target;
            if (o.tagName == "INPUT" && o.type == "checkbox") //点击treeview的checkbox是触发
            {
                var d = o.id; //获得当前checkbox的id;
                var e = d.replace("CheckBox", "Nodes"); //通过查看脚本信息,获得包含所有子节点div的id
                var div = window.document.getElementById(e); //获得div对象
                if (div != null)  //如果不为空则表示,存在自节点
                {
                    var check = div.getElementsByTagName("INPUT"); //获得div中所有的已input开始的标记
                    for (i = 0; i < check.length; i++) {
                        if (check[i].type == "checkbox") //如果是checkbox
                        {
                            check[i].checked = o.checked; //字节点的状态和父节点的状态相同,即达到全选
                        }
                    }
                }
                else  //点子节点的时候,使父节点的状态改变,即不为全选
                {
                    var divid = o.parentElement.parentElement.parentElement.parentElement.parentElement; //子节点所在的div
                    var id = divid.id.replace("Nodes", "CheckBox"); //获得根节点的id
                    var checkbox = divid.getElementsByTagName("INPUT"); //获取所有子节点数
                    var s = 0;
                    for (i = 0; i < checkbox.length; i++) {
                        if (checkbox[i].checked)  //判断有多少子节点被选中
                        {
                            s++;
                        }
                    }
                    if (s == checkbox.length)  //如果全部选中 或者 选择的是另外一个根节点的子节点 ,
                    {                               //    则开始的根节点的状态仍然为选中状态
                        window.document.getElementById(id).checked = true;
                    }
                    else {                               //否则为没选中状态
                        window.document.getElementById(id).checked = false;
                    }
                }
            }
        }


//**后台获取选中的ID

StringBuilder str = new StringBuilder();
            for (int i = 0; i < tvList.CheckedNodes.Count; i++)
            {
                if (tvList.CheckedNodes[i].Checked)
                    str.Append(tvList.CheckedNodes[i].Value+";");
            }

0 0
原创粉丝点击