客户端操作带checkbox的TreeView完美解决方案
实现功能:
1、自动选择子级
2、自动判断选择父级
3、使用Hidden存储选择的NodeData,用“,”分割
<script>
function tree_oncheck(tree)
{
var node=tree.getTreeNode(tree.clickedNodeIndex);
//如果没有选中,那么其所有的父节点状态都是未选中
var ParentNode = node.getParent();
while (ParentNode != null) {
if(tree.getTreeNode(tree.clickedNodeIndex).getAttribute("Checked"))
{
ParentNode.setAttribute("Checked", "true");
}
else
{
ParentNode.setAttribute("Checked", "false");
var BrotherNodes = new Array();
BrotherNodes = ParentNode.getChildren();
for (i = 0; i < BrotherNodes.length; i ++){
if (BrotherNodes[i].getAttribute("Checked")) {
ParentNode.setAttribute("Checked", "true");
break;
}
}
}
ParentNode = ParentNode.getParent();
}
//控制子节点
setcheck(node,tree);
FindCheckedFromTree(tree);
// InitCheck(tree)
}
function setcheck(node,tree)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
return;
else{
for(i=0;i<ChildNode.length;i++){
var cNode;
cNode=ChildNode[i];
cNode.setAttribute("Checked",tree.getTreeNode(tree.clickedNodeIndex).getAttribute("Checked"));
if(parseInt(cNode.getChildren().length)!=0)setcheck(cNode,tree);
}
}
}
function IsChecked(node)
{
var check=new Array();
check=document.Form1.hdGroupright.value.split(",");
for(i=0;i<check.length;i++){
if(check[i]==node.getAttribute("NodeData")){
return true;
}
}
return false;
}
function InitCheck(node)
{
if(document.Form1.hdGroupright.value!="")
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();
if(parseInt(ChildNode.length)==0)
return;
else{
for(i=0;i<ChildNode.length;i++){
var cNode;
cNode=ChildNode[i];
cNode.setAttribute("Checked",IsChecked(cNode));
if(parseInt(cNode.getChildren().length)!=0)InitCheck(cNode);
}
}
}
}
function FindCheckedFromTree(tree) {
var i = 0;
var node;
document.Form1.hdGroupright.value = '';
FindCheckedFromNode(tree);
}
//从一个节点寻找其中所有被选中节点(递归)
function FindCheckedFromNode(node) {
var i = 0;
var nodes = new Array();
nodes = node.getChildren();
//alert('Now searching ' + ': ' + node.getAttribute("Text"));
for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("Checked"))
AddChecked(cNode);
if (parseInt(cNode.getChildren().length) != 0 ) {
FindCheckedFromNode(cNode);
}
}
}
function AddChecked(node) {
//alert(node.getAttribute("Text") + ' is checked');
if(document.Form1.hdGroupright.value=="")
{
document.Form1.hdGroupright.value += node.getAttribute("NodeData");
}else
{
document.Form1.hdGroupright.value += ","+node.getAttribute("NodeData");
}
}
// -->
</script>
<body leftMargin="0" topMargin="0" rightMargin="0" onload="InitCheck(document.all('tvGroup'))">
后台Me.tvGroup.Attributes.Add("oncheck", "tree_oncheck(this)")