解决TreeView中使用JavaScript完成CheckBox全选的办法

总结这次的工作,明白了几个关键的地方:
1.JavaScript中的确可以直接引用.Net服务器端控件,但是问题在于,控件的ID在编译后会自动加上名字空间,所以这里要特别注意。
2.使用JavaScript可以使对TreeView的操作不需要再PostBack,十分方便有效。
3.空间状态的显示和实际存储是有区别的,一定要十分注意。
需要在C#文件中加入:
TreeView.Attributes.Add( " oncheck " " tree_oncheck() " );

主要的JavaScript代码如下:
< script language = " javascript " >
<!--

function  tree_oncheck()
{
    
var  node  =  TreeView.getTreeNode(event.treeNodeIndex);
    
var  Pchecked  =  node.getAttribute( " checked " );
    setcheck(node, Pchecked);
    TreeView.queueEvent('oncheck', node.getNodeIndex());
}

function  setcheck(node, Pc)
{
    
var  ChildNode  =   new  Array();
    ChildNode 
=  node.getChildren();
    
if  (parseInt(ChildNode.length)  !=   0 )
    {
        
for  ( var  i  =   0 ; i  <  ChildNode.length; i ++ )
        {
            
var  cNode  =  ChildNode[i];
            
if  (cNode.getAttribute( " checked " !=  Pc)
            {
                
if  (parseInt(cNode.getChildren().length)  !=   0 )
                    setcheck(cNode, Pc);
                cNode.setAttribute(
" checked " , Pc);
                TreeView.queueEvent('oncheck', cNode.getNodeIndex());
            }
        }
    }
}

// -->
</ script >

整个功能的实现需要修改微软treeview控件的一个Bug 
需要修改inetpub\wwwroot\webctrl_client\1_0\treeview.htc。
把function doCheckboxClick(el)中的第一行,
el.checked = !el.checked;
改成:
el.checked = !el.getAttribute("checked");




博主注:这篇文章讲到的方法经本人试用会出错,较完善的解决方法见 TreeView父子联动效果保持节点状态一致

你可能感兴趣的:(JavaScript)