Asp.Net TreeView 复选框选择
2016-01-11 17:14
591 查看
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" onclick="client_OnTreeNodeChecked(event);"> </asp:TreeView>
<script type="text/javascript">
//TreeView onclick 触发事件
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 = IsMyChildCheckBoxsUnChecked(childCheckBox);
}
return retVal;
}
</script>
相关文章推荐
- asp.net生成N组指定位数随机数都一样的解决办法
- ASP.NET——页面传值
- asp.net(C#)页面事件顺序
- ASP.NET在RENDER中加载HTML来动态生成或者修改页面
- ASP.NET(C#)——int.Parse和Convert.ToInt32
- VS2013从头开始创建Web Form--ASP.NET数据源和数据绑定控件
- (转)【ASP.NET开发】获取客户端IP地址 via C#
- ASP.NET(C#)——IsPostback
- 将aspx.cs代码写到前台页面中
- ASP.NET(C#)——不扩展System.Web.UI.Page
- 【ASP.NET】将数据库连接字符串写在Web.config
- ASP.NET(c#)——如何重新生成designer.cs文件
- (已测)asp.net file文件上传
- ASP.Net学习笔记005--ASP.Net的IsPostBack揭秘
- ASP.Net学习笔记004--基于ashx方式的ASP.Net开发1
- ASP.Net学习笔记002--ASP.Net服务端控件做了什么2
- ASP.Net学习笔记001--ASP.Net简介1
- ASP 中 Cookies 的 Expires 属性的设置(JS版本)
- [Asp.net 5] Options-配置文件(2)
- 利用IdentityServer3在ASP.NET 5和Angular中实现OAuth2 Implicit Flow