石头园  
每日收获

上次实现的功能只能使选中/不选中父结点时,令它的所有子结点都设置为跟父结点一样的状态。
有时候,在选中一个子结点时,我们希望它的父结点也同时被选中。如下javascript代码可以实现这个功能:
//for treeview controller,其中pageTV为treeview对象
function tree_oncheck()
{
    var node = pageTV.getTreeNode(event.treeNodeIndex);
    var Pchecked = node.getAttribute("checked");
    if (Pchecked == true)
    {
     setfathercheck(node);     //这个函数实现了上述的附加功能
    }
    setcheck(node, Pchecked);
    pageTV.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);
                pageTV.queueEvent('oncheck', cNode.getNodeIndex());
            }
        }
    }
}

function setfathercheck(node)
{
    var FatherNode;
    FatherNode = node.getParent();
    if (FatherNode != null )
    {
            if (FatherNode.getAttribute("checked") != true)
            {
    setfathercheck(FatherNode);
                FatherNode.setAttribute("checked", true);
                pageTV.queueEvent('oncheck', FatherNode.getNodeIndex());
           }
    }
}

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

posted on 2006-08-25 00:11  石头仔  阅读(2598)  评论(5编辑  收藏  举报