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 Demo模态窗口
Dec 06 Javascript
再论Javascript下字符串连接的性能
Mar 05 Javascript
extjs每个组件要设置唯一的ID否则会出错
Jun 15 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
深入理解Vue 的钩子函数
Sep 05 Javascript
js prototype和__proto__的关系是什么
Aug 23 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 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
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
jQuery事件详解
2017/02/23 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
python 类详解及简单实例
2017/03/24 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
理工大学毕业生自荐信范文
2014/02/22 职场文书
一年级学生评语大全
2014/04/21 职场文书
村级四风对照检查材料
2014/08/24 职场文书
2014年公务员工作总结
2014/11/18 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书