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 mouseover、mouseout停止事件冒泡的解决方案
Apr 07 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
Aug 23 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 Javascript
js return返回多个值,通过对象的属性访问方法
Feb 21 Javascript
Vue2路由动画效果的实现代码
Jul 10 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
基于element-ui的rules中正则表达式
Sep 04 Javascript
微信小程序canvas拖拽、截图组件功能
Sep 04 Javascript
JavaScript使用表单元素验证表单的示例代码
Aug 20 Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 Javascript
js实现双色球效果
Aug 02 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
其他功能
2006/10/09 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
常用PHP封装分页工具类
2017/01/14 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
javascript引用对象的方法
2007/01/11 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
Python中的ctime()方法使用教程
2015/05/22 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
python如何爬取动态网站
2020/09/09 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
异地年检委托书范本
2014/09/24 职场文书
教师工作表现评语
2014/12/31 职场文书
阿凡达观后感
2015/06/10 职场文书
老人与海读书笔记
2015/06/26 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android