Asp.Net TreeView 父節點checkbox控制子節點checbox

1. 截圖看看效果:

2.html結構

<div>
        <asp:TreeView ID="tvList" runat="server"  ShowCheckBoxes="All" ShowLines="True"   οnclick="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+";");
            }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章