请问一下 怎么实现当选中树的某一个节点时自动选中其父结点??
用 js 怎么实现呢??

解决方案 »

  1.   

    参考以下:加上javascript的处理方法
    就可以了
    代码写出来太长了
    <script language="javascript">
    <!--
    var strFuncs = "";//功能节点ID字符串
    var strSepa = ",";//功能节点ID字符串的分隔符//单击"取消"按钮
    function btnCancel_Click()
    {
    self.close();
    }//单击"确定"按钮,得到所选择的所有功能选项
    function btnOK_Click()
    {
    var tvwFunc1 = document.getElementById("tvwFunc");var strFunc = "";
    var allRootNodes = new Array();
    allRootNodes = tvwFunc1.getChildren();strFunc = getCheckedNodeID(allRootNodes);
    window.parent.returnValue = strFunc;//向父页面返回功能节点ID
    self.close();
    }//遍历所有节点,获取所有选中节点的 ID 号
    function getCheckedNodeID(NodeArray)
    {
    if(parseInt(NodeArray.length) == 0)
    {
    return;
    }
    else
    {
    for(var i = 0; i < NodeArray.length; i++)
    {
    var cNode;
    cNode = NodeArray[i];
    if(cNode.getAttribute("Checked") == true)
    {
    strFuncs = strFuncs + cNode.getAttribute("ID") + strSepa;
    }if(cNode.getChildren().length != 0)
    {
    //第归调用
    getCheckedNodeID(cNode.getChildren());
    }
    }
    }var iPos = strFuncs.lastIndexOf(",");if(iPos != 0)
    {
    return strFuncs.substring(0,iPos);
    }
    else
    {
    return strFuncs;
    }
    }//初始化选中节点
    function initCheckedNode()
    {
    var trids = window.dialogArguments;
    var arrCheckedId = new Array();
    var arrUncheckedId = new Array();
    if(trids != null)
    {
    arrCheckedId = trids.split(",");
    var tvwFunc = document.getElementById("tvwFunc");
    var arrAllRootNode = new Array();
    arrAllRootNode = tvwFunc.getChildren();try
    {
    for(var i = 0; i < arrCheckedId.length; i++)
    {
    FindOriFuncNode(arrAllRootNode,arrCheckedId[i]);
    }
    }
    catch(e)
    {
    alert(e);
    }}
    }
    //第归调用遍历所有树形节点
    function FindOriFuncNode(NodeArray,nodeID)
    {
    if(parseInt(NodeArray.length) == 0)
    {
    return;
    }
    else
    {
    for(var i = 0; i < NodeArray.length; i++)
    {
    var cNode = NodeArray[i];
    if(cNode.getAttribute("ID") == nodeID)
    {
    cNode.setAttribute("Checked","true");
    break;
    }if(parseInt(cNode.getChildren().length) != 0)
    {
    FindOriFuncNode(cNode.getChildren(),nodeID);
    }
    }
    }
    }//oncheck事件
    function tree_oncheck(tree)
    {
    var node = tree.getTreeNode(tree.clickedNodeIndex);
    var blChecked = node.getAttribute("Checked");//设置子节点选中
    setCheck(node,blChecked);//设置父节点选中
    setParentNode(node);document.all.checkedNodes.value = "";
    document.all.uncheckedNodes.value = "";FindCheckedFromNode(document.getElementById("tvwFunc"));
    }//设置子节点状态
    function setCheck(node,blChecked)
    {
    var childNodes = new Array();
    childNodes = node.getChildren();if(parseInt(childNodes.length) == 0)
    {
    return;
    }
    else
    {
    for(var i = 0; i < childNodes.length; i++)
    {
    var cNode = childNodes[i];
    if(parseInt(cNode.getChildren().length) != 0)
    {
    //递归调用
    setCheck(cNode,blChecked);
    }
    cNode.setAttribute("Checked",blChecked);
    }
    }
    }//设置父节点状态,
    function setParentNode(node)
    {
    if(node.getAttribute("Checked"))
    {
    //如果节点选中,则设置所有父节点选中
    var parentNode = node.getParent();
    while(parentNode != null)
    {
    parentNode.setAttribute("Checked","true");
    parentNode = parentNode.getParent();
    }
    }
    else
    {
        var blChecked = false;
    var parentNode = node.getParent();
    if(parentNode != null)
    {
    var arrBrotherNode = parentNode.getChildren();
    for(var i = 0; i < arrBrotherNode.length; i++)
    {
    var bNode = arrBrotherNode[i];
    if(bNode.getAttribute("Checked"))
    {
    blChecked = true;
    break;
    }
    }// 如果所有子节点CheckBox为假,则设置父节点为假
    if(blChecked == false)
    {
    parentNode.setAttribute("Checked","false");
    }
    }
    }
    }//获取所有节点状态
    function FindCheckedFromNode(tree)
    {
    var allNodes = new Array();
    allNodes = tree.getChildren();for(var i = 0; i < allNodes.length; i++)
    {
    var cNode;
    cNode = allNodes[i];
    if(cNode.getAttribute("Checked"))
    {
    addCheckedNode(cNode);
    }
    else
    {
    addUncheckedNode(cNode);
    }if(cNode.getChildren().length != 0)
    {
    //递归调用
    FindCheckedFromNode(cNode);
    }
    }
    }//添加选中节点
    function addCheckedNode(node)
    {
    document.all.checkedNodes.value += node.getAttribute("NodeData");
    document.all.checkedNodes.value += ',';
    }
    //添加未选中节点
    function addUncheckedNode(node)
    {
    document.all.uncheckedNodes.value += node.getAttribute("NodeData");
    document.all.uncheckedNodes.value += ',';
    }
    //-->
    </script>