//树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级

          //事件响应函数
var HandleCheckbox = function () {
//取得事件触发的元素,因为只要点了树控件,就会触发这个函数,所以须判断:只有点击checkbox时才继续
var element = event.srcElement;
if (element.tagName == "INPUT" && element.type == "checkbox") {
var checkedState = element.checked;
//取到checkbox的上级table。微软TreeView树是以每个同级节点以一个div包裹一个table再包裹input形式存在的
while (element.tagName != "TABLE") {
element = element.parentElement;
}
var parentElement = element; //如果checkbox被选中的话,要判断父级checkbox是否应该被自动选中
if (checkedState) {
CheckParents(element);
} //取到元素的父级元素的同一层级的后面的元素
element = element.nextSibling; if (element != null) {
var childTables = element.getElementsByTagName("TABLE"); for (var tableIndex = 0; tableIndex < childTables.length; tableIndex++) {
CheckTable(childTables[tableIndex], checkedState);
}
}
if (checkedState == false) {
UnCheckParents(parentElement);
} }
}
//判断并勾选父级checkbox
function CheckParents(table) {
//首先判断元素有没有checkbox,table的列为三即有为二就没有
if (table == null || table.rows[0].cells.length == 2) // This is the root
{
return;
}
//取到元素的父级元素的同一层级的前面的元素
var parentTable = table.parentElement.previousSibling;
var checkedCount = GetCheckedCount(table.parentElement);
var childCount = GetChildrenCount(table.parentElement);
if (checkedCount == childCount) {
//勾选父级元素
CheckTable(parentTable, true);
}
//迭代函数
CheckParents(parentTable);
} //判断并取消父级checkbox
function UnCheckParents(table) { if (table == null || table.rows[0].cells.length == 2) // This is the root
{
return;
}
var parentTable = table.parentElement.previousSibling;
//判断子节点的选中个数
//判断子节点的选中个数
var checkedCount = GetCheckedCount(table.parentElement);
var childCount = GetChildrenCount(table.parentElement);
if (checkedCount < childCount) {
CheckTable(parentTable, false);
}
//迭代
UnCheckParents(parentTable);
} // 勾选或取消checkbox
function CheckTable(table, checked) {
//以保证取到table的行的最后一列(TreeView解压出来是将input放在table行的最后一列)
var checkboxIndex = table.rows[0].cells.length - 1;
var cell = table.rows[0].cells[checkboxIndex];
//取到checkbox
var checkboxes = cell.getElementsByTagName("INPUT");
if (checkboxes.length == 1) {
checkboxes[0].checked = checked;
} } //判断子节点个数
function GetChildrenCount(table) {
var checkedCount = 0;
var element = table.nextSibling;
var childTable = table.getElementsByTagName("TABLE"); for (var tableIndex = 0; tableIndex < childTable.length; tableIndex++) {
var childTables = childTable[tableIndex];
var checkboxIndex = childTables.rows[0].cells.length - 1;
var cell = childTables.rows[0].cells[checkboxIndex];
var checkboxes = cell.getElementsByTagName("INPUT");
if (checkboxes.length == 1) {
checkedCount++;
}
}
return checkedCount;
}
//判断子节点的选中个数
function GetCheckedCount(table) {
var checkedCount = 0;
var element = table.nextSibling;
var childTable = table.getElementsByTagName("TABLE"); for (var tableIndex = 0; tableIndex < childTable.length; tableIndex++) {
var childTables = childTable[tableIndex];
var checkboxIndex = childTables.rows[0].cells.length - 1;
var cell = childTables.rows[0].cells[checkboxIndex];
var checkboxes = cell.getElementsByTagName("INPUT");
if (checkboxes.length == 1 && checkboxes[0].checked == true) {
checkedCount++;
}
}
return checkedCount;
}

调用的时候直接调用

HandleCheckbox就可以了

脚本全选全不选操作asp.net treeview控件的更多相关文章

  1. ASP.NET - TreeView控件,只操作最后一级节点

    效果: 使用母板页进行,左右页面进行跳转. 绑定TreeView控件:http://www.cnblogs.com/KTblog/p/4792302.html 主要功能: 点击节点的时候,只操作最后一 ...

  2. asp 使用TreeView控件

    这段代码为了使用 TreeNodeCheckChanged 事件,会有回刷新的效果: 不喜欢的可查看改进版,利用js控制选择操作,无界面刷新, “http://www.cnblogs.com/GoCi ...

  3. asp.net TreeView控件绑定数据库显示信息

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. asp.net treeview控件无刷新选择和删除节点的ajax方法

    转载 http://blog.csdn.net/luq885/article/details/1621681 如果节点被选择的话,节点所在的td的class属性就会被设置为TreeView1_1.   ...

  5. MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件

    类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...

  6. 实现带复选框的TreeView控件

    实现效果: 知识运用: TreeView控件的CheckView属性 //是否在树形视图控件中显示复选框 public bool CheckBoxs{ get;ser } 实现代码: TreeView ...

  7. asp.net Login控件基本属性及事件说明

    原文:asp.net Login控件基本属性及事件说明 Login系列控件是微软为了简化我们的开发过程,为我们进行常规的安全开发提供块捷途径. Login系列控件包含下列控件: Login 登录控件 ...

  8. 浅析五大ASP.NET数据控件

    转自:http://kb.cnblogs.com/page/69207/ 摘要:ASP.NET中有不少的控件,在这当中有一部分是用来处理数据的控件.在这里我们正要讨论的就是ASP.NET数据控件,希望 ...

  9. [ASP.NET]ScriptManager控件使用 转载

    目录 概述 局部刷新 错误处理 类型系统扩展 注册定制脚本 注册 Web 服务 在客户端脚本中使用认证和个性化服务 ScriptManagerProxy 类 添加 ScriptManager 控件 客 ...

随机推荐

  1. zzuli 1812: sort 排序

    1812: sort Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 352  Solved: 216 SubmitStatusWeb Board De ...

  2. Android 7.1 屏幕旋转流程分析

    Android 7.1   屏幕旋转流程分析 一.概述 Android屏幕的旋转在framework主要涉及到三个类,结构如图 PhoneWindowManager:为屏幕的横竖屏转换的管理类. Wi ...

  3. jsp内置对象 的使用范围和类型【说明】

    jsp内置对象 jsp内置对象有以下9种,我们会在后面的章节中分别介绍他们.这9种对象例如以下: 名称 类型 使用范围 request javax.servlet.http.HttpServletRe ...

  4. android checkbox 未选中状态 已选中状态 替换成自己的图片

    效果图: 未选中状态: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  5. Java -Xms -Xmx -Xss -XX:MaxNewSize -XX:MaxPermSize含义记录

    出现java.lang.OutOfMemoryError异常时,常使用的方法便是将例如以下配置语句: -Xms512m -Xmx512m -Xss1024k -XX:MaxNewSize=256M - ...

  6. jquery 自定义选择器

    // HTML 代码 <body> <div id="divid1" class="divclass">白色</div> & ...

  7. 原生js实现一个简单的倒计时功能

    大家好,我是云中君!欢迎大家来观看我的博客 之前那,在群里看到很多人问,关于电商网站中的倒计时功能怎么实现,很多人说在网上找了很多插件,但是不是很会用,所以今天就在这里分享一下我封装的一个小的倒计时功 ...

  8. 分布式:ACID, CAP, BASE

    本文主要讲述分布式系统开发的一些相关理论基础. 一.ACID ACID是一系列对系统中数据进行访问与更新的操作所组成的一个程序执行的逻辑单元,狭义上的事务特指数据库事务. 1.Atomic原子性 事务 ...

  9. VS2010灵活运用快捷操作功能(总结)

    转载于:http://blog.csdn.net/trassion/article/details/7667814 1.快速using(这个的快捷键是ctrl+.) 2.快速回到之前编辑的代码页面现在 ...

  10. ASP.NET.Core中使用AutoMapper

      首先需要在NuGet中引用AutoMapper的类库 install-package AutoMapper install-package AutoMapper.Extensions.Micros ...