怎么用脚本实现TreeView的父子节点联动功能? 由于Firefox本身的特点,在实现时分别在IE下用脚本实现,在Firefox下用.cs代码实现。由于这两种浏览器兼容性实在不怎么好,艾!
OK,废话少说,现在首先给出实现
TreeView父子节点联动选种的
脚本方法:
function
ChcekFuncNodes(e)
{
var
i
=
e.clickedNodeIndex;
var
node
=
e.getTreeNode(i);
var
NodeArray
=
node.getChildren();
if
(NodeArray.length
>
0
)
{
if
(node.getAttribute(
"
Checked
"
)
==
true
)
{
for
(
var
i
=
0
;i
<
NodeArray.length;i
++
)
{
CheckTreeNode(NodeArray[i],
true
,
false
);
GetSelectedFunctionPointID(NodeArray[i]);
}
GetSelectedFunctionID(node);
}
else
{
for
(
var
i
=
0
;i
<
NodeArray.length;i
++
)
{
CheckTreeNode(NodeArray[i],
false
,
false
);
}
}
}
else
{
var
ParentNode
=
node.getParent();
if
(ParentNode
!=
null
)
{
if
(node.getAttribute(
"
Checked
"
)
==
true
)
{
GetSelectedFunctionPointID(node);
CheckTreeNode(ParentNode,
true
,
false
);
GetSelectedFunctionID(ParentNode);
}
else
{
if
(AllChildTreeNodeSameCheck(ParentNode,
false
))
{
CheckTreeNode(ParentNode,
false
,
false
);
}
}
}
else
{
CheckTreeNode(node,
true
,
false
);
GetSelectedFunctionID(node);
}
}
}
function
CheckTreeNode(chilNode,isCheck,atuoSetChilTreeNode)
{
if
(chilNode
!=
null
)
{
//
alert(chilNode);
chilNode.setAttribute('checked',isCheck);
if
(atuoSetChilTreeNode)
{
CheckChildTreeNode(chilNode,isCheck)
}
}
}
function
CheckChildTreeNode(Pnode,isCheck)
{
if
(Pnode
!=
null
)
{
var
arr
=
Pnode.getChildren();
for
(
var
i
=
0
;i
<
arr.length;i
++
)
{
arr[i].setAttribute('checked',isCheck);
}
}
}
function
AllChildTreeNodeSameCheck(PareNode, value)
{
if
(PareNode
!=
null
)
{
var
chids
=
PareNode.getChildren();
for
(
var
i
=
0
;i
<
chids.length;i
++
)
{
if
(chids[i].getAttribute(
"
Checked
"
)
!=
value)
{
return
false
;
}
}
}
return
true
;
}
大家都知道,不用多讲,下面两个方法是纪录用户选中的FunctionID和FunctionPointID,通过隐藏控件传递给.cs文件使用,补充一下就是为什么我用document.getElementById('<%=hidenFunID.ClientID%>')而不用document.getElementById('hidenFunID')?原因是我的脚本是放在ascx文件中的(即UserControl中的)所以只能通过这种方式来找控件,否则就找不到哟!算是个小技巧吧 :)
function
GetSelectedFunctionID(nodes)
{
var
hideFun
=
document.getElementById('
<%=
hidenFunID.ClientID
%>
');
var
checkFun
=
hideFun.value;
checkFun
+=
nodes.getAttribute(
"
ID
"
)
+
"
;
"
;
hideFun.value
=
checkFun;
//
alert(hideFun.value);
}
function
GetSelectedFunctionPointID(nodes)
{
var
hideFunPoint
=
document.getElementById('
<%=
txtPointId.ClientID
%>
');
var
checkFun
=
hideFunPoint.value;
checkFun
+=
nodes.getAttribute(
"
ID
"
)
+
"
;
"
;
hideFunPoint.value
=
checkFun;
//
alert(hideFunPoint.value);
}
最后一步,让
TreeView父子节点联动产生真正的效果,哈哈.................
private
void
Page_Load(object sender, System.EventArgs e)
{
if
(
!
Page.IsPostBack )
{
tvRoleFunctions.Attributes.Add("oncheck","ChcekFuncNodes(this)");
}
}
下次写作预告:
怎么实现Select All TreeView全部节点的功能?怎么实现展开和折叠自如?
http://jigee.cnblogs.com/archive/2006/06/09/421367.html#421589