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 相关文章推荐
$.ajax json数据传递方法
Nov 19 Javascript
AngularJS基础学习笔记之简单介绍
May 10 Javascript
浅谈javascript中onbeforeunload与onunload事件
Dec 10 Javascript
js实现对table的增加行和删除行的操作方法
Oct 13 Javascript
ES6新特性之变量和字符串用法示例
Apr 01 Javascript
基于ES6 Array.of的用法(实例讲解)
Sep 05 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
javascript、php关键字搜索函数的使用方法
May 29 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
javascript代码简写的几种常用方式汇总
Aug 23 Javascript
利用JavaScript写一个简单计算器
Nov 27 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
Python中bisect的用法
2014/09/23 Python
Python中str.format()详解
2017/03/12 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
python实现人机五子棋
2020/03/25 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
祖国在我心中演讲稿300字
2014/05/04 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
好媳妇事迹材料
2014/12/24 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技