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 相关文章推荐
jQuery 使用手册(二)
Sep 23 Javascript
替代window.event.srcElement效果的可兼容性的函数
Dec 18 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
Nov 23 Javascript
js实现模拟计算器退格键删除文字效果的方法
May 07 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
js实现三级联动效果(简单易懂)
Mar 27 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
Node.js实现一个HTTP服务器的方法示例
May 13 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
node使用async_hooks模块进行请求追踪
Jan 28 Javascript
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中heredoc的使用方法
2013/06/17 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
js常用函数 不错
2006/09/08 Javascript
javascript 控制弹出窗口
2007/04/10 Javascript
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
关于vuex的学习实践笔记
2017/04/05 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python Socket使用实例
2017/12/18 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
Python 没有main函数的原因
2020/07/10 Python
Python grpc超时机制代码示例
2020/09/14 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
婚礼新郎父母答谢词
2014/01/16 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
神农溪导游词
2015/02/11 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android