treeview Checkbox的联级选择

fengzeng 2008-03-31 05:23:39
我在网上下了些代码 大家看看 现在反向联级的时候会出错 ,大家放到自己机器上看看 。看怎么解决

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>

<script language ='javascript' type='text/javascript'>
//function OnTreeNodeChecked()
//{
//var ele = event.srcElement;
//if(ele.type=='checkbox')
//{
//var childrenDivID = ele.id.replace('CheckBox','Nodes');
//var div = document.getElementById(childrenDivID);
//if(div==null)return;
//var checkBoxs = div.getElementsByTagName('INPUT');
//for(var i=0;i<checkBoxs.length;i++)
//{
//if(checkBoxs[i].type=='checkbox')

//checkBoxs[i].checked=ele.checked;
//}
//}
//}
// JavaScript Document
function client_OnTreeNodeChecked(event)
{
//得到当前所 Click 的对象
var objNode;
if(!public_IsObjectNull(event.srcElement))
{
//IE
objNode = event.srcElement;
}
else
{
//FF
objNode = event.target;
}

//判断是否 Click 的 CheckBox
if(!public_IsCheckBox(objNode))
return;

var objCheckBox = objNode;
//根据CheckBox状态进行相应处理
if(objCheckBox.checked==true)
{
//递归选中父节点的 CheckBox
setParentChecked(objCheckBox);

//递归选中所有的子节点
setChildChecked(objCheckBox);
}
else
{
//递归取消选中所有的子节点
setChildUnChecked(objCheckBox);

//递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中).
setParentUnChecked(objCheckBox);
}
}

//判断对象是否为空
function public_IsObjectNull(element)
{
if(element==null || element == "undefined")
return true;
else
return false;
}

//判断对象是否为 CheckBox
function public_IsCheckBox(element)
{
if(public_IsObjectNull(element))
return false;

if(element.tagName!="INPUT" || element.type!="checkbox")
return false;
else
return true;
}
//得到包含所有子节点的 Node(Div 对象)
function public_CheckBox2Node(element)
{
var objID = element.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("CheckBox"));
return document.getElementById(objID+"Nodes");
}
//得到父节点的 CheckBox
function public_Node2CheckBox(element)
{
var objID = element.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nodes"));
return document.getElementById(objID+"CheckBox");
}
//得到本节点所在的 Node(Div 对象)
function public_GetParentNode(element)
{
var parent = element.parentNode;
var upperTagName = "DIV";
//如果这个元素还不是想要的 tag 就继续上溯
while (parent && (parent.tagName.toUpperCase() != upperTagName))
{
parent = parent.parentNode ? parent.parentNode : parent.parentElement;
}
return parent;
}


//设置节点的父节点 Checked
function setParentChecked(currCheckBox)
{
var objParentNode= public_GetParentNode(currCheckBox);
if(public_IsObjectNull(objParentNode))
return;

var objParentCheckBox = public_Node2CheckBox(objParentNode);

if(!public_IsCheckBox(objParentCheckBox))
return;

objParentCheckBox.checked = true;
setParentChecked(objParentCheckBox);
}

//当父节点的所有子节点都未被选中时,设置父节点 UnChecked
function setParentUnChecked(currCheckBox)
{
var objParentNode= public_GetParentNode(currCheckBox);
if(public_IsObjectNull(objParentNode))
return;
//判断 currCheckBox 的同级节点是否都为 UnChecked.
if(!IsMyChildCheckBoxsUnChecked(objParentNode))
return;

var objParentCheckBox = public_Node2CheckBox(objParentNode);

if(!public_IsCheckBox(objParentCheckBox))
return;

objParentCheckBox.checked = false;
setParentUnChecked(objParentCheckBox);
}

//设置节点的子节点 UnChecked
function setChildUnChecked(currObj)
{
var currNode;
if(public_IsCheckBox(currObj))
{
currNode = public_CheckBox2Node(currObj);
if (public_IsObjectNull(currNode))
return;
}
else
currNode = currObj;

var currNodeChilds = currNode.childNodes;
var count = currNodeChilds.length;
for(var i=0;i<count;i++)
{
var childCheckBox = currNodeChilds[i];
if(public_IsCheckBox(childCheckBox))
{
childCheckBox.checked = false;
}
setChildUnChecked(childCheckBox);
}
}

//设置节点的子节点 Checked
function setChildChecked(currObj)
{
var currNode;
if(public_IsCheckBox(currObj))
{
currNode = public_CheckBox2Node(currObj);
if (public_IsObjectNull(currNode))
return;
}
else
currNode = currObj;

var currNodeChilds = currNode.childNodes;
var count = currNodeChilds.length;
for(var i=0;i<count;i++)
{
var childCheckBox = currNodeChilds[i];
if(public_IsCheckBox(childCheckBox))
{
childCheckBox.checked = true;
}
setChildChecked(childCheckBox);
}
}

//判断该节点的子节点是否都为 UnChecked
function IsMyChildCheckBoxsUnChecked(currObj)
{
var retVal = true;

var currNode;
if(public_IsCheckBox(currObj) && currObj.checked == true)
{
return false;
}
else
currNode = currObj;

var currNodeChilds = currNode.childNodes;
var count = currNodeChilds.length;
for(var i=0;i<count;i++)
{
if (retVal == false)
break;
var childCheckBox = currNodeChilds[i];
if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true)
{
retVal = false;
return retVal;
}
else
retVal = IsMyChildCheckBoxsUnChecked1(childCheckBox);
}
return retVal;
}

</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" OnClick="client_OnTreeNodeChecked(event)">
<Nodes>
<asp:TreeNode Text="中国" Value="中国">
<asp:TreeNode Text="湖北" Value="湖北">
<asp:TreeNode Text="武汉" Value="武汉">
<asp:TreeNode Text="青山" Value="青山"></asp:TreeNode>
<asp:TreeNode Text="武昌" Value="武昌"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="襄樊" Value="襄樊"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="四川" Value="四川">
<asp:TreeNode Text="成都" Value="成都"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
<%-- <asp:TreeView ID="TreeView1" runat="server" OnClick="client_OnTreeNodeChecked(event)">
</asp:TreeView>--%>

</div>
</form>
</body>
</html>
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzeng 2008-04-01
  • 打赏
  • 举报
回复
大家可以粘贴在自己机器上试试看啊 。 解决不了啊
Jinglecat 2008-03-31
  • 打赏
  • 举报
回复
1.
父子节点CheckBox的级联选择
这个 251 已经实现了 http://www.cnblogs.com/itrust/archive/2006/04/03/365439.aspx

2.
TreeView几个小技巧 http://www.cnblogs.com/Jinglecat/archive/2007/03/19/679313.html
anita2008 2008-03-31
  • 打赏
  • 举报
回复
TREEVIEW 服务器端控件也能做。
UP
yuanmanguo 2008-03-31
  • 打赏
  • 举报
回复
mark
zsxghost 2008-03-31
  • 打赏
  • 举报
回复
这么多代码,谁看?
直接说什么问题。

我前两天做的,没有问题。
sucong 2008-03-31
  • 打赏
  • 举报
回复
关注
wxg22526451 2008-03-31
  • 打赏
  • 举报
回复
友情up
有个第三方的TreeView控件支持联动

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧