ASP.NET 2.0實現內建TreeView的用戶端連帶選擇

來源:互聯網
上載者:User

關於TreeView連帶選擇的功能估計很多人都寫過,如果用伺服器端事件來寫比較方便,但是多了一層伺服器端互動,系統易用性也上不太好,所以還是把這些功能的處理放在用戶端會好一些。

 功能說明:

A、選中某節點後會預設選中其所有子節點和其所有父節點的CheckBox

B、取消選中某節點後會取消選中其所有子節點的CheckBox,如其父節點下尚有其他子節點被選中,則不取消父節點CheckBox,如沒有,則取消選中所有父節點的CheckBox

簡單寫了些用戶端代碼,可以直接放到JS檔案中使用,希望對大家能有協助。
1、首先是伺服器端加一段代碼,進行客戶指令碼註冊
this.TVMenus.Attributes.Add("onclick", "CheckEvent();");

2、其次是下面的用戶端指令碼,我把它直接放到一個專用的JS檔案中

JavaScript
 1 //用戶端捕捉事件
 2 function  CheckEvent() 
 3 { 
 4     var  objNode  =  event.srcElement; 
 5     if(objNode.tagName == "INPUT"  &&  objNode.type== "checkbox") 
 6     {
 7         var objParentDiv = objNode.id.replace("CheckBox","Nodes");
 8         if(objNode.checked==true) 
 9         { 
10             setChildCheckState(objParentDiv,true); 
11                     
12             setParentCheckeState(objNode,true); 
13         }
14         else 
15         {
16             setChildCheckState(objParentDiv,false);
17                    
18             if(!HasOtherChecked(objNode)){    
19                 setParentCheckeState(objNode,false); 
20             }
21         }
22     }
23 }
24 
25 //判斷是否有並行的其他節點被選中
26 function HasOtherChecked(objNode)
27 {
28     var  objParentDiv  =  WebForm_GetParentByTagName(objNode, "div"); 
29     
30     var chks = objParentDiv.getElementsByTagName("INPUT");
31     for(var i=0;i<chks.length;i++){
32         if(chks[i].checked && chks[i].id != objNode.id)
33         {
34             return true;
35         }
36     }
37     return false;
38 }
39 
40 //設定父節點
41 function  setParentCheckeState(objNode,chkstate) 
42 {         
43     try{
44         var  objParentDiv  =  WebForm_GetParentByTagName(objNode, "div");         
45                 
46         if(objParentDiv == null  ||  objParentDiv  ==  "undefined "){ 
47                 return; 
48         } 
49         else{
50             var objParentChkId = objParentDiv.id.replace("Nodes","CheckBox");            
51             var objParentCheckBox = document.getElementById(objParentChkId);            
52             
53             if(objParentCheckBox){  
54                 objParentCheckBox.checked = chkstate;
55                 setParentCheckeState(objParentDiv,chkstate);
56             }
57         }
58      }
59      catch(e){}
60 } 
61 
62 //設定子節點
63 function  setChildCheckState(nodeid,chkstate) 
64 {  
65     var node = document.getElementById(nodeid);
66     
67     if(node){
68         var chks = node.getElementsByTagName("INPUT");
69         for(var i=0;i<chks.length;i++){
70             chks[i].checked = chkstate;
71         }
72     }
73 } 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.