ASP.NET 2.0 TreeView中用JavaScript实现选择子接点CheckBox是自动选择上父节点(或者所有父节点)

本文介绍了一种使用JavaScript实现在TreeView控件中选中子节点时自动选中父节点的方法,解决了用户体验问题,避免了频繁的服务器请求。

由于项目中要实现TreeView中 选择子接点CheckBox是自动选择上父节点(或者所有父节点)功能,当然如何使用后台方法的话,很好实现,但是这样给用户的体验是很差的。每选择一次,就会想服务器提交一会,带来平凡刷新页面. 所以我想用JS(Javascript)来实现.找网络上寻求了很没有找到线索,很多都提供的服务端的实现方法。后来通过查看TreeView在客户端生成的原代码,分析了半天从记录的数据库来看,没有找到什么父节点子节点的关系.看来asp.net是把这个关系放在ViewState里面的.我只好另外想办法,就当我要放弃的时候,发现可以通过控件的层次关系来实现:当选者某个CheckBox节点时候,她到父接点CheckBox的控件有固定的层次关系,于我写了下面的Javascript代码实现了这个功能. 该代码在IE6,IE7,Firfox上测试通过:

javascript 方法:

//用Treeview chekbox节点自动选择父节点的处理事件
function AutoSelectParentNode(obj)
{
   
if(obj.checked)
   {
    
var p=obj.parentNode.parentNode.parentNode.parentNode.parentNode;
    
var pCheckNodeID=p.id.replace("Nodes","CheckBox");
    
var checkNode=document.getElementById(pCheckNodeID);
    
if(checkNode)
    { 
      checkNode.click();
//如果不需要选中所有父节点的话(如父的父等)把本行代码去掉及可
      checkNode.checked=true;
    }
   }
}
//用于给TreeView的 chebox添加 自动选择父节点的处理事件(如果要将某一TreeView变为自动选择父节点 只需调用下面方法)
function SetTreeNodeAutoSelectParentNodeHandle(treeID)
{
    
var objs = document.getElementsByTagName("input");
    
for(var i=0;i<objs.length;i++)
    {
        
if(objs[i].type=='checkbox')
        {
            
var obj=objs[i];
            
if(obj.id.indexOf(treeID)!=-1)
            {
                objs[i].onclick
=function(){AutoSelectParentNode(this);};
            }
        }
    }
}

 

方法AutoSelectParentNode选则CheckBox接点时的处理方法.

方法SetTreeNodeAutoSelectParentNodeHandle为TreeView注册TreeView选择事件.

使用例子如下:

 

                <div style="width:500px; height:450px; overflow:auto">
                
<asp:TreeView runat="server" ID="tvAssetKindTree" ExpandDepth="0" ShowCheckBoxes="All" ShowLines="True" ExpandImageToolTip=""></asp:TreeView>
                
</div>
                
<script type="text/javascript" language="javascript">
                SetTreeNodeAutoSelectParentNodeHandle(
"<%=tvAssetKindTree.ClientID%>");
                
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值