bootstrap-treeview自定义双击事件实现方法


Posted in Javascript onJanuary 09, 2016

bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件。该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一些继承树结构,如视图树、列表树等等。但是不知为什么这个插件没有自带双击事件。
经过多次测试,使用方法$('#tree').dblclick( function () {})和方法$('#tree').on('dblclick',function(){})都不起作用!百思不得其解。最后救助大神,问题解决了,但是好像不太优雅但最终还是可以交差了。

这个解决方案中使用到了bootstrap-treeview自带的两个事件"nodeSelected"和"nodeUnselected".如果在treeview的节点上双击一定会触发选中事件和取消选中事件,计算这两个时间的时间间隔就可以模拟出双击事件的效果了。双击事件每次点击鼠标左键的间隔,人为操作300毫秒足够。

具体代码如下:

<!DOCTYPE html>
<html>

 <head>
  <meta charset="utf-8" />
  <title></title>
  <link href="css/bootstrap.css" rel="stylesheet" />
 </head>

 <body>
  <div id="tree" style="width: 400px;height: 1000px;margin-left: auto;margin-right: auto;"></div>
  <div id="testDate"></div>
  <script src="js/jquery.js"></script>
  <script src="js/bootstrap-treeview.js"></script>
  <script type="text/javascript">
   //获取树形结构列表数据
   function getTree() {
    var tree = [{
     text: "Parent 1",
     nodes: [{
      text: "Child 1",
      nodes: [{
       text: "Grandchild 1"
      }, {
       text: "Grandchild 2"
      }]
     }, {
      text: "Child 2"
     }]
    }, {
     text: "Parent 2"
    }, {
     text: "Parent 3"
    }, {
     text: "Parent 4"
    }, {
     text: "Parent 5"
    }];
    return tree;
   }
   
   //初始化树形结构列表
   $('#tree').treeview({
    data: getTree()
   });
   
   //最后一次触发节点Id
   var lastSelectedNodeId = null;
   //最后一次触发时间
   var lastSelectTime = null;
   
   //自定义业务方法
   function customBusiness(data){
    alert("双击获得节点名字: "+data.text);
   }

   function clickNode(event, data) {
    if (lastSelectedNodeId && lastSelectTime) {
     var time = new Date().getTime();
     var t = time - lastSelectTime;
     if (lastSelectedNodeId == data.nodeId && t < 300) {
      customBusiness(data);
     }
    }
    lastSelectedNodeId = data.nodeId;
    lastSelectTime = new Date().getTime();
   }
   
   //自定义双击事件
   function customDblClickFun(){
    //节点选中时触发
    $('#tree').on('nodeSelected', function(event, data) {
     clickNode(event, data)
    });
    //节点取消选中时触发
    $('#tree').on('nodeUnselected', function(event, data) {
     clickNode(event, data)
    });
   }
   $('#tree').dblclick( function () { alert("Hello World!"); });
   $(document).ready(function() {
    //customDblClickFun();
   });
  </script>
 </body>

</html>

粗滤讲解:

最主要的全局变量:lastSelectedNodeId,lastSelectedNodeId

最主要的方法:clickNode()

上面这个方法主要用来判断选中事件和取消选中事件操作的目标是否是一个且时间间隔是否足够小。符合这两个条件客户就是想触发双击事件。可以再函数customBusiness中自定义业务逻辑。

如果大家还想深入学习,可以点击这里进行学习,再为大家附两个精彩的专题:Bootstrap学习教程 Bootstrap实战教程

以上就是本文的详细内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
jquery固定底网站底部菜单效果
Aug 13 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
js图片处理示例代码
May 12 Javascript
JavaScript内存管理介绍
Mar 13 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
Vue实现的父组件向子组件传值功能示例
Jan 19 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
Apr 30 Javascript
简单了解微信小程序的目录结构
Jul 01 Javascript
vue 组件基础知识总结
Jan 26 Vue.js
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 #Javascript
学习JavaScript设计模式之状态模式
Jan 08 #Javascript
jQuery CSS3相结合实现时钟插件
Jan 08 #Javascript
js实现对ajax请求面向对象的封装
Jan 08 #Javascript
javascript弹性运动效果简单实现方法
Jan 08 #Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 #Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
Jan 08 #Javascript
You might like
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
Python学习笔记之os模块使用总结
2014/11/03 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
有关Python的22个编程技巧
2018/08/29 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python使用建议技巧分享(三)
2020/08/18 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
班干部演讲稿
2014/04/24 职场文书
给学校建议书范文
2014/05/13 职场文书
农村文化活动总结
2014/08/28 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
Python中的tkinter库简单案例详解
2022/01/22 Python