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')
{
//当前节点全选
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;
}
}
//处理选择当前节点的父节点的选中和取消选中
ChkParent(nowIndex,ele.id,ele.checked);
}
}
//上一节点的索引Index,上一节点checkBox的ID,状态(True)
function ChkParent(index,childId,flag)
{
//寻找当前节点的父节点(即寻找上级的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;
}
}
}
}
//根据找到的div逐级处理各级CheckBox的状态
function chk(obj,flag)
{
var chkID=obj.id.replace('Nodes','CheckBox');
var chkbox = document.getElementById(chkID); //获取同级的CheckBox
if(chkbox!=null)
{
//选中状态
if(flag)
{
chkbox.checked=flag;
//如果为顶层则终止递归
if(chkID==tree.id+"n0CheckBox")
{
return;
}
//递归处理各级CheckBox的状态
chk(obj.parentNode,flag);
}
///非选中状态
else
{
//如果为顶层则终止递归
if(chkID==tree.id+"n0CheckBox")
{
return;
}
//判断当前节点下面是否有Checkbox选中,如果有选中的,当前节点的CheckBox不取消选中状态,否则取消
var checkBoxs = obj.getElementsByTagName('INPUT');
var sel=false;//记录当前节点下面是否有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控件的实例名
根据一个checkbox节点对应一个table,父节点对应一个div 在找到相应的checkbox.进而判断选择与否.
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛