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 相关文章推荐
用ASP将SQL搜索出来的内容导出为TXT的代码
Jul 27 Javascript
JQuery中的ready函数冲突的解决方法
May 17 Javascript
Javascript笔记一 js以及json基础使用说明
May 22 Javascript
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
jQuery简单实现网页选项卡特效
Nov 24 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
Aug 13 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
Sep 14 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
JavaScript 空间坐标的使用
Aug 19 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 Javascript
利用 JavaScript 实现并发控制的示例代码
Dec 31 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中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
php标签云的实现代码
2012/10/10 PHP
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python操作Excel之xlsx文件
2017/03/24 Python
django 修改server端口号的方法
2018/05/14 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python分布式编程实现过程解析
2019/11/08 Python
关于numpy数组轴的使用详解
2019/12/05 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
农民入党思想汇报
2014/01/03 职场文书
股东合作协议书
2014/04/14 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
十八大标语口号
2014/10/09 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
python单元测试之pytest的使用
2021/06/07 Python
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
js不常见操作运算符总结
2021/11/20 Javascript
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS