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

          //事件响应函数
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. POJ 1273 Drainage Ditches 网络流 FF

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 74480   Accepted: 2895 ...

  2. 最近整理AI相关感想

    前言 目前笔者致力于 在AI 开发研究,四大平台里,百度AI 提供 的开发者资料是最全,开发的友好度也是最高的,很多都已经集成在SDK中,支持许多语言体系. 其实 作为公司层面的考虑,针对技术的研究出 ...

  3. Android开发之漫漫长途 ⅥI——Android消息机制(Looper Handler MessageQueue Message)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  4. Java 代码学习之理解数据类型中的坑

    package dailytest; import org.junit.Test; public class DataTypeTest { /** * 当有字符串第一次参与运算后,+成了连接符的作用 ...

  5. vue.js介绍,常用指令,事件,以及制作简易留言版

    一.vue是什么? 一个mvvm框架(库).和angular类似,比较容易上手.小巧,让我们的代码更加专注于业务逻辑,而不是去关注DOM操作 二.vue和angular之间的区别 vue--简单易学 ...

  6. SpringBoot多数据源配置

    准备环境: jdk1.8 eclipse tomcat8.0 第一步:在配置文件添加如下信息: spring.datasource.primary.url=jdbc:mysql://localhost ...

  7. JSP具体篇——response对象

    response对象 response对象用于响应client请求,向客户输出信息. 他封装了JSP产生的响应,并发送到client以响应client请求. 1.重定向网页 使用response对象的 ...

  8. HDU 4923 Room and Moor (多校第六场C题) 单调栈

    Problem Description PM Room defines a sequence A = {A1, A2,..., AN}, each of which is either 0 or 1. ...

  9. 彻底弄懂 JavaScript 执行机制

    本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定 ...

  10. Android DVM

    1.DVM(Dalvik Virtual Machine)概述 是Google公司自己设计用于Android平台的Java虚拟机 支持已经转化为.dex(及Dalvik Excutable)格式的Ja ...