脚本全选全不选操作asp.net treeview控件

  1 //树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级
  2
  3          //事件响应函数
  4          var HandleCheckbox = function () {
  5              //取得事件触发的元素,因为只要点了树控件,就会触发这个函数,所以须判断:只有点击checkbox时才继续
  6              var element = event.srcElement;
  7              if (element.tagName == "INPUT" && element.type == "checkbox") {
  8                  var checkedState = element.checked;
  9                  //取到checkbox的上级table。微软TreeView树是以每个同级节点以一个div包裹一个table再包裹input形式存在的
 10                  while (element.tagName != "TABLE") {
 11                      element = element.parentElement;
 12                  }
 13                  var parentElement = element;
 14
 15                  //如果checkbox被选中的话,要判断父级checkbox是否应该被自动选中
 16                  if (checkedState) {
 17                      CheckParents(element);
 18                  }
 19
 20                  //取到元素的父级元素的同一层级的后面的元素
 21                  element = element.nextSibling;
 22
 23                  if (element != null) {
 24                      var childTables = element.getElementsByTagName("TABLE");
 25
 26                      for (var tableIndex = 0; tableIndex < childTables.length; tableIndex++) {
 27                          CheckTable(childTables[tableIndex], checkedState);
 28                      }
 29                  }
 30                  if (checkedState == false) {
 31                      UnCheckParents(parentElement);
 32                  }
 33
 34              }
 35          }
 36          //判断并勾选父级checkbox
 37          function CheckParents(table) {
 38              //首先判断元素有没有checkbox,table的列为三即有为二就没有
 39              if (table == null || table.rows[0].cells.length == 2) // This is the root
 40              {
 41                  return;
 42              }
 43              //取到元素的父级元素的同一层级的前面的元素
 44              var parentTable = table.parentElement.previousSibling;
 45              var checkedCount = GetCheckedCount(table.parentElement);
 46              var childCount = GetChildrenCount(table.parentElement);
 47              if (checkedCount == childCount) {
 48                  //勾选父级元素
 49                  CheckTable(parentTable, true);
 50              }
 51              //迭代函数
 52              CheckParents(parentTable);
 53          }
 54
 55          //判断并取消父级checkbox
 56          function UnCheckParents(table) {
 57
 58              if (table == null || table.rows[0].cells.length == 2) // This is the root
 59              {
 60                  return;
 61              }
 62              var parentTable = table.parentElement.previousSibling;
 63              //判断子节点的选中个数
 64              //判断子节点的选中个数
 65              var checkedCount = GetCheckedCount(table.parentElement);
 66              var childCount = GetChildrenCount(table.parentElement);
 67              if (checkedCount < childCount) {
 68                  CheckTable(parentTable, false);
 69              }
 70              //迭代
 71              UnCheckParents(parentTable);
 72          }
 73
 74          // 勾选或取消checkbox
 75          function CheckTable(table, checked) {
 76              //以保证取到table的行的最后一列(TreeView解压出来是将input放在table行的最后一列)
 77              var checkboxIndex = table.rows[0].cells.length - 1;
 78              var cell = table.rows[0].cells[checkboxIndex];
 79              //取到checkbox
 80              var checkboxes = cell.getElementsByTagName("INPUT");
 81              if (checkboxes.length == 1) {
 82                  checkboxes[0].checked = checked;
 83              }
 84
 85          }
 86
 87          //判断子节点个数
 88          function GetChildrenCount(table) {
 89              var checkedCount = 0;
 90              var element = table.nextSibling;
 91              var childTable = table.getElementsByTagName("TABLE");
 92
 93              for (var tableIndex = 0; tableIndex < childTable.length; tableIndex++) {
 94                  var childTables = childTable[tableIndex];
 95                  var checkboxIndex = childTables.rows[0].cells.length - 1;
 96                  var cell = childTables.rows[0].cells[checkboxIndex];
 97                  var checkboxes = cell.getElementsByTagName("INPUT");
 98                  if (checkboxes.length == 1) {
 99                      checkedCount++;
100                  }
101              }
102              return checkedCount;
103          }
104          //判断子节点的选中个数
105          function GetCheckedCount(table) {
106              var checkedCount = 0;
107              var element = table.nextSibling;
108              var childTable = table.getElementsByTagName("TABLE");
109
110              for (var tableIndex = 0; tableIndex < childTable.length; tableIndex++) {
111                  var childTables = childTable[tableIndex];
112                  var checkboxIndex = childTables.rows[0].cells.length - 1;
113                  var cell = childTables.rows[0].cells[checkboxIndex];
114                  var checkboxes = cell.getElementsByTagName("INPUT");
115                  if (checkboxes.length == 1 && checkboxes[0].checked == true) {
116                      checkedCount++;
117                  }
118              }
119              return checkedCount;
120          }     

调用的时候直接调用

HandleCheckbox就可以了
时间: 2024-10-09 00:55:39

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

ASP.NET TreeView控件父子勾选框联动勾选

摘要:ASP.NET TreeView控件父子勾选框联动勾选 后置代码: this.TreeView1.Attributes.Add("onclick", "CheckEvent();"); JS 代码: function setParentState(objNode) { ?? var objParentDiv = WebForm_GetParentByTagName(objNode, "div"); ?? if (objParentDiv =

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

效果: 绑定TreeView控件:http://www.cnblogs.com/KTblog/p/4792302.html 主要功能: 点击节点的时候,只操作最后一级的节点,其他节点跳过不执行代码. 代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Web.UI.WebControls; 6 7 nam

ASP.NET TreeView控件的使用

<asp:TreeView ID="TreeView2" runat="server"></asp:TreeView> 数据库: 前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="TreeView.index" %> <

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

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Data; 8 using System.Data.SqlClient; 9 using System.Configuration; 10 11 public part

C# TreeView控件 父节点子节点勾选变化关联

项目用到了TreeView控件,父节点子节点勾选需要关联.子节点勾选,父节点同步.父节点勾选,所有子节点都勾选,并递归.网上找了一圈,好多代码都不满足要求.节点勾选,向下递归子节点,都实现了.节点勾选,向上递归,父节点同步勾选,也实现了.但是节点去除勾选,应该判断其同级所有节点,若同级节点都处于未勾选状态,则应该去除父节点勾选状态,并向上递归.这一点,没有找到合适的代码.就自己写了这部分代码.仅仅只是实现这个效果,代码还有优化的空间,后续有时间再来修改了. private void treeVi

ASP.NET_验证控件(class0620)

为什么使用验证控件 当需要让用户输入数据时,用户有可能输入不符合我们程序逻辑要求的信息,所以我们要对输入进行验证. 客户端验证(用户体验,减少服务器端压力) 服务器端验证(防止恶意攻击,客户端js很容易就可以被绕过) 必须要对用户输入的数据进行合法性校验,这些校验逻辑很多是重复的,比如字段不能为空.必须为日期格式.数字不能大于100等,而且要同时在客户端和服务器端校验. 验证控件 ASP.Net提供了如下的控件: RequiredFieldValidator:字段必填: RangeValidat

ASP.NET服务器端控件(class0617)

ASP.Net服务端基本控件介绍 ASP.Net服务端控件是ASP.Net对HTML的封装,在C#代码中就可以用txt1.Text=‘abc’这种方式来修改input的值,ASP.Net会将服务端控件转成HTML代码输出给浏览器.服务端控件是ASP.Net非常吸引初学者.非常容易上手的东西,也是最被人诟病的东西.物尽其用,服务端控件在内网系统.互联网系统的后台部分等访问频率不高的地方用的还是很适合的. (互联网公司,产品型公司(OA)) 在服务端控件的标签中写的属性如果不是控件内置的属性就会被原

初始ASP.NET数据控件【续 ListView】

ListView控件   ListView控件可以用来显示数据,它还提供编辑,删除,插入,分页与排序等功能.ListView是GridView与DataList的融合体,它具有GridView控件编辑数据的功能同时还具有DataList控件的灵活布局的功能.ListView控件的分页功能需要通过DataPager控件来实现. ListView控件的模版 LayoutTemplate:标识定义控件的主要布局的根模版.包含一个占位符对象,如表行(tr),div,span元素.此元素将由ItemTem

[ASP.NET]ScriptManager控件使用

目录 概述 局部刷新 错误处理 类型系统扩展 注册定制脚本 注册 Web 服务 在客户端脚本中使用认证和个性化服务 ScriptManagerProxy 类 添加 ScriptManager 控件 客户端脚本管理示例 概述 ScriptManager 控件管理用于 Microsoft ASP.NET AJAX 页面的客户端脚本.默认情况下,ScriptManager 控件将 Microsoft AJAX 库的脚本与页面注册到一起,这使脚本可以使用类型系统扩展并支持局部页面输出和 Web 服务调用