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 相关文章推荐
详解new function(){}和function(){}() 区别分析
Mar 22 Javascript
jQuery AJAX回调函数this指向问题
Feb 08 Javascript
JQuery 学习笔记01 JQuery初接触
May 06 Javascript
JS.findElementById()使用介绍
Sep 21 Javascript
浅谈js中变量初始化
Feb 03 Javascript
js将滚动条滚动到指定位置的简单实现方法
Jun 25 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
Mar 09 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
微信小程序实现星级评分和展示
Jul 05 Javascript
ES10的13个新特性示例(小结)
Sep 23 Javascript
JavaScript的一些小技巧分享
Jan 06 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
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上传大文件失败的原因及应对策略
2015/10/20 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
js中的闭包学习心得
2018/02/06 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python装饰器用法实例总结
2018/02/07 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python cumsum函数的具体使用
2019/07/29 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
酒店办公室文员岗位职责
2013/12/18 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
幼儿教师国培感言
2014/02/19 职场文书
高一学生评语大全
2014/04/25 职场文书
企业法人代表任命书
2014/06/06 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
Java实现聊天机器人完善版
2021/07/04 Java/Android