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 相关文章推荐
javascript中的this详解
Dec 08 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
JavaScript实现数组随机排序的方法
Jun 26 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
jQuery操作之效果详解
May 19 jQuery
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 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中的超全局变量
2006/10/09 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
javascript常用的设计模式
2017/02/09 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python常见的格式化输出小结
2016/12/15 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
Java基础面试题
2014/07/19 面试题
机电工程专业应届生求职信
2013/10/03 职场文书
应届生自我鉴定
2013/12/11 职场文书
报社实习生自荐信
2014/01/24 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
初中教师业务学习材料
2014/05/12 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers