asp.net中TreeView的CheckBox 是否选中

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.进而判断选择与否.

posted @ 2009-09-08 12:54  jmz  阅读(4202)  评论(0编辑  收藏  举报
Copyright by © Pippon