var ClienName;
function OnTreeNodeChecked(controlID,obj)
{
tree=obj;//取出TreeView在客戶端的表示對象
ClienName=tree.id.substring(0,tree.id.indexOf(controlID));//取出TreeView在客戶ID的前綴
var ele = event.srcElement;
if(ele.type=='checkbox')
{
//當前節(jié)點全選
var subLength=ClienName.length+14;//取出當前復選框的索引值
var subLength=tree.id.length+1;
var nowIndex=ele.id.substring(subLength)
.substring(0,ele.id.substring(subLength).indexOf("C"));
var childrenDivID = ele.id.replace('CheckBox','Nodes');
var div = document.getElementById(childrenDivID); //獲取同級的Div
if(div!=null) //判斷同級的Div是否為Null
{
var checkBoxs = div.getElementsByTagName('INPUT');
for(var i=0;i<checkBoxs.length;i++)
{
if(checkBoxs[i].type=='checkbox')
checkBoxs[i].checked=ele.checked;
}
}
//處理選擇當前節(jié)點的父節(jié)點的選中和取消選中
ChkParent(nowIndex,ele.id,ele.checked);
}
}
//上一節(jié)點的索引Index,上一節(jié)點checkBox的ID,狀態(tài)(True)
function ChkParent(index,childId,flag)
{
//尋找當前節(jié)點的父節(jié)點(即尋找上級的DIV)
for(i=index;i>=0;i--)
{
var id=tree.id+"n"+i+"CheckBox";//當前CheckBox的ID
var parent=document.getElementById(id);//獲取當前的CheckBox
if(parent!=null)//判斷獲取的當前的CheckBox是否為空
{
var childrenDivID = parent.id.replace('CheckBox','Nodes');
var div = document.getElementById(childrenDivID); //獲取同級的Div
if(div==null) //判斷同級的Div是否為Null
{
continue;
}
else
{
chk(div,flag);
break;
}
}
}
}
//根據(jù)找到的div逐級處理各級CheckBox的狀態(tài)
function chk(obj,flag)
{
var chkID=obj.id.replace('Nodes','CheckBox');
var chkbox = document.getElementById(chkID); //獲取同級的CheckBox
if(chkbox!=null)
{
//選中狀態(tài)
if(flag)
{
chkbox.checked=flag;
//如果為頂層則終止遞歸
if(chkID==tree.id+"n0CheckBox")
{
return;
}
//遞歸處理各級CheckBox的狀態(tài)
chk(obj.parentNode,flag);
}
///非選中狀態(tài)
else
{
//如果為頂層則終止遞歸
if(chkID==tree.id+"n0CheckBox")
{
return;
}
//判斷當前節(jié)點下面是否有Checkbox選中,如果有選中的,當前節(jié)點的CheckBox不取消選中狀態(tài),否則取消
var checkBoxs = obj.getElementsByTagName('INPUT');
var sel=false;//記錄當前節(jié)點下面是否有Checkbox選中
for(var i=0;i<checkBoxs.length;i++)
{
if(checkBoxs[i].type=='checkbox')
{
if( checkBoxs[i].checked)
{
sel=true;
break;
}
}
}
if(!sel)
{
chkbox.checked=flag;
}
chk(obj.parentNode,flag);
}
}
else
{
return;
}
}
前臺調用:tvPeople.Attributes.Add("onclick", "OnTreeNodeChecked('" + tvPeople.ID + "'," + tvPeople.ClientID + ")");
tvPeople為TreeView控件的實例名
根據(jù)一個checkbox節(jié)點對應一個table,父節(jié)點對應一個div 在找到相應的checkbox.進而判斷選擇與否.
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點擊進入論壇