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

          //事件响应函数
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. C# Excel写入数据及图表

    开发工具:VS2017 语言:C DotNet版本:.Net FrameWork 4.0及以上 使用的DLL工具名称:GemBox.Spreadsheet.dll (版本:37.3.30.1185) ...

  2. MYSQL 主从复制---简单易学

    本帖最后由 传说中的草包 于 2017-4-12 09:12 编辑为什么要用mysql主从复制? 这个问题不需要回答吧,,,,,想想,一个人干活快呢,还是一万个能性格功力一样的人干活快呢. 不用解释大 ...

  3. JavaScript参考

    要查看英语原文,请勾选"英语"复选框.也可将鼠标指针移到文本上,在弹出窗口中显示英语原文. 翻译 英语 JavaScript 语言参考 JavaScript 是一种可嵌入网页和其他 ...

  4. TensorFlow 处理图片

    目标:介绍如何对图像数据进行预处理使训练得到的神经网络模型尽可能小地被无关因素所影响.但与此同时,复杂的预处理过程可能导致训练效率的下降.为了减少预处理对于训练速度的影响,TensorFlow 提供了 ...

  5. SpringBoot入门

    简介 从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置.它使用"习惯优于配置"(项目中存在大量的配置,此外还内置了一个习 ...

  6. nuget服务器搭建,以及如何发布一个Nuget包

    本文章主要介绍如何将本地dll打包成为一个Nuget包,并如何发布到自己的nuget服务器.章节如下 1. 本地dll如何打包,以及版本的更新 2. 在linux上搭建nuget.server 3. ...

  7. Mysql的管理及使用

    第1章 Mysql的管理 1.1 连接管理mysql mysql[options] #Linux或UNIX shell提示符(终端窗口) mysql --help #查看帮助信息 mysql --ve ...

  8. 表单的自动到json与urlstr

    将表单序列化成json,将json转换成字符串 //将表单序列化成json 字符串 $.fn.serializeObject = function(){ var obj = {}; var count ...

  9. hibernate 映射组成关系

    建立域模型和关系数据模型有着不同的出发点: 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程 在没有数据冗余的情况下, 应该尽可能降低表的数目, 简化表之间的參照关 ...

  10. UVA 10465 Homer Simpson(全然背包: 二维目标条件)

    UVA 10465 Homer Simpson(全然背包: 二维目标条件) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&a ...