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 相关文章推荐
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
jQuery超酷平面式时钟效果代码分享
Mar 30 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
基于JS2Image实现圣诞树代码
Dec 24 Javascript
jQuery实现布局高宽自适应的简单实例
May 28 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
微信小程序 页面跳转和数据传递实例详解
Jan 19 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
详解如何webpack使用DllPlugin
Sep 30 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下使用SimpleXML 处理XML 文件
2010/02/27 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
很可爱的输入框
2008/08/03 Javascript
javascript 网页跳转的方法
2008/12/24 Javascript
js 字符串操作函数
2009/07/25 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
python 识别图片中的文字信息方法
2018/05/10 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
python生成任意频率正弦波方式
2020/02/25 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
Python定义一个函数的方法
2020/06/15 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
零基础学python应该从哪里入手
2020/08/11 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
python热力图实现简单方法
2021/01/29 Python
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
2014年志愿者工作总结
2014/11/20 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server