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 cookie解码函数(兼容ff)
Mar 17 Javascript
COM中获取JavaScript数组大小的代码
Nov 22 Javascript
JS仿flash上传头像效果实现代码
Jul 18 Javascript
JS target与currentTarget区别说明
Aug 28 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
jQuery过滤特殊字符及JS字符串转为数字
May 26 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
May 17 Javascript
详解wow.js中各种特效对应的类名
Sep 13 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
js实现自动锁屏功能
Jun 02 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编程技术
2015/11/09 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jQuery 选择器理解
2010/03/16 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
会计专业毕业生自荐信范文
2013/12/20 职场文书
毕业实习评语
2014/02/10 职场文书
学生检讨书
2015/01/27 职场文书
学年个人总结范文
2015/03/05 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
Python time库的时间时钟处理
2021/05/02 Python
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
如何用Python搭建gRPC服务
2021/06/30 Python