JS控制TreeView的结点选择


Posted in Javascript onNovember 11, 2016

网上有很多控制TreeView的checkbox选中,但是自己尝试的时候,要么报错,要么不可行。以下这种写法是经过验证有效的,仅作参考,思维比较巧妙!

Tree:

<asp:TreeView ID="treeViewDapartment" runat="server" SelectedNodeStyle-BackColor="GrayText" onclick="javascript:NodeCheck();" 
     Font-Size="13px" ShowCheckBoxes="All" ShowLines="true" AutoGenerateDataBindings="false" ShowExpandCollapse="true" >
</asp:TreeView>

脚本:

<script language="javascript" type="text/javascript">
   //节点父节点选中子节点全选
   function NodeCheck() {  
      var o = window.event.srcElement;
      if (o.tagName == "INPUT" && o.type == "checkbox") //点击treeview的checkbox是触发 
      {
        var d = o.id; //获得当前checkbox的id; 
        var e = d.replace("CheckBox", "Nodes"); //通过查看脚本信息,获得包含所有子节点div的id 
        var div = window.document.getElementById(e); //获得div对象 
        if (div != null) //如果不为空则表示,存在自节点 
        {
          var check = div.getElementsByTagName("INPUT"); //获得div中所有的已input开始的标记 
          for (i = 0; i < check.length; i++) {
            if (check[i].type == "checkbox") //如果是checkbox 
            {
              check[i].checked = o.checked; //字节点的状态和父节点的状态相同,即达到全选 
            }
          }
        }
        else //点子节点的时候,使父节点的状态改变,即不为全选
        {
          var divid = o.parentElement.parentElement.parentElement.parentElement.parentElement; //子节点所在的div   
          var id = divid.id.replace("Nodes", "CheckBox"); //获得根节点的id 

          var checkbox = divid.getElementsByTagName("INPUT"); //获取所有子节点数
          var s = 0;
          for (i = 0; i < checkbox.length; i++) {
            if (checkbox[i].checked) //判断有多少子节点被选中 
            {
              s++;
            }
          }
          if (s == checkbox.length) //如果全部选中 或者 选择的是另外一个根节点的子节点 , 
          {                //  则开始的根节点的状态仍然为选中状态 
            window.document.getElementById(id).checked = true;
          }
          else {                //否则为没选中状态 
            window.document.getElementById(id).checked = false;
          }
        }

      }
  }
</script>

这个脚本的写法巧妙运用生成的页面源文件中checkbox与其子结点div之间的关系!

那么,只需要在注册一下触发事件即可:

protected void Page_Load(object sender, EventArgs e)
{  
    this.treeViewDapartment.Attributes.Add("onclick", "NodeCheck();"); 

}

特别感谢,雷云锋给予的指导!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript模板入门介绍
Sep 26 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
jQuery中die()方法用法实例
Jan 19 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
Nov 21 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 Javascript
node通过npm写一个cli命令行工具
Oct 12 Javascript
Angular之toDoList的实现代码示例
Dec 02 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
微信小程序之数据绑定原理解析
Aug 14 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 Javascript
node+express制作爬虫教程
Nov 11 #Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 #Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 #Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 #Javascript
通过扫描二维码打开app的实现代码
Nov 10 #Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 #Javascript
关于json字符串与实体之间的严格验证代码
Nov 10 #Javascript
You might like
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
PHP引用的调用方法分析
2016/04/25 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
vue mounted组件的使用
2018/06/18 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python列表生成器迭代器实例解析
2019/12/19 Python
浅析Django中关于session的使用
2019/12/30 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
入学申请自荐信范文
2014/02/26 职场文书
担保书怎么写
2014/04/01 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
学校会议通知范文
2015/04/15 职场文书
《落花生》教学反思
2016/02/16 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python