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 相关文章推荐
In Javascript Class, how to call the prototype method.(three method)
Jan 09 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
详解如何较好的使用js
Dec 16 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
Dec 27 Javascript
基于JavaScript实现下拉列表左右移动代码
Feb 07 Javascript
vue元素实现动画过渡效果
Jul 01 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 Javascript
vue基于Teleport实现Modal组件
May 31 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加入ftp扩展的解决方法
2013/02/07 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
Python中title()方法的使用简介
2015/05/20 Python
详解Python中的日志模块logging
2015/06/19 Python
Python heapq使用详解及实例代码
2017/01/25 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
优秀大学生推荐信范文
2013/11/28 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
公务员考察材料范文
2014/12/23 职场文书
小学生思想品德评语
2014/12/31 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang