.net的web項目中treeview的checkbox的選中取消問題

<script language="javascript"type="text/javascript">
        //TreeView onclick 觸發事件
function client_OnTreeNodeChecked(event)
{
    //得到當前所 Click 的對象
    var objNode;
    if(!public_IsObjectNull(event.srcElement))
    {
        //IE
        objNode = event.srcElement;
    }
    else
    {
        //FF
        objNode = event.target;
    }

    //判斷是否 Click 的 CheckBox
    if(!public_IsCheckBox(objNode))
        return;

    var objCheckBox = objNode;
    //根據CheckBox狀態進行相應處理
    if(objCheckBox.checked==true)
    {
        //遞歸選中父節點的 CheckBox
        setParentChecked(objCheckBox);
        
        //遞歸選中所有的子節點
        setChildChecked(objCheckBox);
    }
    else
    {        
        //遞歸取消選中所有的子節點
        setChildUnChecked(objCheckBox);
        
        //遞歸取消選中父節點(如果當前節點的所有其他同級節點也都未被選中).
        setParentUnChecked(objCheckBox);
    }
}

//判斷對象是否爲空
function public_IsObjectNull(element)
{
    if(element==null || element == "undefined")
        return true;
    else
        return false;
}

//判斷對象是否爲 CheckBox
function public_IsCheckBox(element)
{
    if(public_IsObjectNull(element))
        return false;
        
    if(element.tagName!="INPUT" || element.type!="checkbox")
        return false;
    else
        return true;
}
//得到包含所有子節點的 Node(Div 對象)
function public_CheckBox2Node(element)
{
    var objID = element.getAttribute("ID");
    objID = objID.substring(0,objID.indexOf("CheckBox")); 
    return document.getElementById(objID+"Nodes");
}
//得到父節點的 CheckBox
function public_Node2CheckBox(element)
{
    var objID = element.getAttribute("ID");
    objID = objID.substring(0,objID.indexOf("Nodes")); 
    return document.getElementById(objID+"CheckBox");
}
//得到本節點所在的 Node(Div 對象)
function public_GetParentNode(element) 
{
    var parent = element.parentNode;
    var upperTagName = "DIV";
    //如果這個元素還不是想要的 tag 就繼續上溯
    while (parent && (parent.tagName.toUpperCase() != upperTagName)) 
    {
        parent = parent.parentNode ? parent.parentNode : parent.parentElement;
    }
    return parent;
}


//設置節點的父節點 Checked
function setParentChecked(currCheckBox)
{ 
    var objParentNode= public_GetParentNode(currCheckBox);
    if(public_IsObjectNull(objParentNode))
        return;    
    
    var objParentCheckBox = public_Node2CheckBox(objParentNode);

    if(!public_IsCheckBox(objParentCheckBox))
        return; 
        
    objParentCheckBox.checked = true;
    setParentChecked(objParentCheckBox);
}

//當父節點的所有子節點都未被選中時,設置父節點 UnChecked
function setParentUnChecked(currCheckBox)
{
    var objParentNode= public_GetParentNode(currCheckBox);
    if(public_IsObjectNull(objParentNode))
        return;   
    //判斷 currCheckBox 的同級節點是否都爲 UnChecked.
    if(!IsMyChildCheckBoxsUnChecked(objParentNode))
        return;    
    
    var objParentCheckBox = public_Node2CheckBox(objParentNode);

    if(!public_IsCheckBox(objParentCheckBox))
        return; 
        
    objParentCheckBox.checked = false;    
    setParentUnChecked(objParentCheckBox);
}

//設置節點的子節點 UnChecked
function setChildUnChecked(currObj)
{
    var currNode;
    if(public_IsCheckBox(currObj))
    {
        currNode = public_CheckBox2Node(currObj);
        if (public_IsObjectNull(currNode))
            return;
    }
    else
        currNode = currObj;
       
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length; 
    for(var i=0;i<count;i++)
    {
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox))
        {
            childCheckBox.checked = false;
        }
        setChildUnChecked(childCheckBox); 
    }
}

//設置節點的子節點 Checked
function setChildChecked(currObj)
{ 
    var currNode;
    if(public_IsCheckBox(currObj))
    {
        currNode = public_CheckBox2Node(currObj);
        if (public_IsObjectNull(currNode))
            return;
    }
    else
        currNode = currObj;
        
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length; 
    for(var i=0;i<count;i++)
    {
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox))
        {
            childCheckBox.checked = true;
        }
        setChildChecked(childCheckBox); 
    }
}

//判斷該節點的子節點是否都爲 UnChecked
function IsMyChildCheckBoxsUnChecked(currObj)
{
    var retVal = true;
    
    var currNode;
    if(public_IsCheckBox(currObj) && currObj.checked == true)
    {
        return false;
    }
    else
        currNode = currObj;
       
    var currNodeChilds = currNode.childNodes;
    var count = currNodeChilds.length; 
    for(var i=0;i<count;i++)
    {
        if (retVal == false)
            break;
        var childCheckBox = currNodeChilds[i];
        if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
        {
            retVal = false;
            return retVal;
        }
        else
            retVal = IsMyChildCheckBoxsUnChecked(childCheckBox);         
    }
    return retVal;
} 
<script>


<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" Style="left: 24px;
            position: relative; top: 56px" onclick="client_OnTreeNodeChecked(event);" ShowLines="True"  meta:resourcekey="TreeViewModulesResource1" ImageSet="BulletedList4"   ExpandDepth="0" Target="middle">
            <Nodes>
                <asp:TreeNode Text="教育" Value="教育">
                    <asp:TreeNode Text="111" Value="111"></asp:TreeNode>
                    <asp:TreeNode Text="222" Value="222"></asp:TreeNode>
                </asp:TreeNode>
                <asp:TreeNode Text="新聞" Value="新聞">
                    <asp:TreeNode Text="111" Value="111"></asp:TreeNode>
                    <asp:TreeNode Text="222" Value="222"></asp:TreeNode>
                </asp:TreeNode>
                <asp:TreeNode Text="體育" Value="體育">
                    <asp:TreeNode Text="111" Value="111"></asp:TreeNode>
                    <asp:TreeNode Text="222" Value="222"></asp:TreeNode>
                </asp:TreeNode>
            </Nodes>
        </asp:TreeView>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章