jQuery 通过事件委派一次绑定多种事件,以减少事件冗余


Posted in Javascript onJune 30, 2010

于是乎,在日常的开发中大量使用连缀写法,而事件方法连缀就是一个特例。若给一个Dom对象使用了绑定了多个事件,便于阅读和书写,习惯了使用连缀写法,但这样的书写方式会造成时间的冗余。
1.事件冗余:多个事件方法中多次调用相同的代码
下面的代码是一个事件方法连缀的写法:

jQuery(function($) { 
$('<div id="livetip"></div>').hide().appendTo('body'); 
var tipTitle = ''; 
$('#mytable').bind('mouseover', function(event) { 
var $link = $(event.target).closest('a'); 
if ($link.length) { 
var link = $link[0]; 
tipTitle = link.title; 
link.title = ''; 
$('#livetip').css({ 
top: event.pageY + 12, 
left: event.pageX + 12 
}) 
.html('<div>' + tipTitle + '</div><div>' + link.href + '</div>') 
.show(); 
}; 
}).bind('mouseout', function(event) { 
var $link = $(event.target).closest('a'); 
if ($link.length) { 
$link.attr('title', tipTitle); 
$('#livetip').hide(); 
}; 
}).bind('mousemove', function(event) { 
var $link = $(event.target).closest('a'); 
if ( $link.length) { 
$('#livetip').css({ 
top: event.pageY + 12, 
left: event.pageX + 12 
}); 
}; 
}); 
});

其中第5|6行、第18|19行、第24|25行多次地使用了同样的一段代码去判断事件对象是否存在。这不管是从代码效率还是代码文件大小的方面来说都是不合理的方法。
2.事件委派:一次性绑定多个事件,根据事件类别委派相应的操作
为了更好地优化上面的代码,可以通过事件委派来修改代码,修改后的代码如下:
jQuery(function($) { 
var $liveTip = $('<div id="livetip"></div>').hide().appendTo('body'); 
var tipTitle = ''; 
$('#mytable').bind('mouseover mouseout mousemove', function(event) { 
var $link = $(event.target).closest('a'); 
if (!$link.length) { return; } 
var link = $link[0]; 
if (event.type == 'mouseover' || event.type == 'mousemove') { 
$liveTip.css({ 
top: event.pageY + 12, 
left: event.pageX + 12 
}); 
}; 
if (event.type == 'mouseover') { 
tipTitle = link.title; 
link.title = ''; 
$liveTip.html('<div>' + tipTitle + '</div><div>' + link.href + '</div>') 
.show(); 
}; 
if (event.type == 'mouseout') { 
$liveTip.hide(); 
if (tipTitle) { 
link.title = tipTitle; 
}; 
}; 
}); 
});

该段代码中一次性地将多个事件绑定到一个待处理的DOM对象之上,在代码的内部通过判断事件的类别来委派不同的处理代码。这样可以避免代码的重复定义,以达到避免时间冗余的效果。
以上两种代码的执行后的效果是完全一样的,相信大家一眼就可以看中哪一种代码的执行效率更加的快速吧!
演示地址 http://demo.3water.com/js/event_delegation/index.html
打包下载 https://3water.com/jiaoben/28044.html
Javascript 相关文章推荐
JS获取IUSR_机器名和IWAM_机器名帐号的密码
Dec 06 Javascript
Javascript查询DBpedia小应用实例学习
Mar 07 Javascript
基于javascript实现单选及多选的向右和向左移动实例
Jul 25 Javascript
JavaScript实现点击按钮直接打印
Jan 06 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 Javascript
送你43道JS面试题(收藏)
Jun 17 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 Javascript
js实现前端界面导航栏下拉列表
Aug 27 Javascript
Jquery AJAX 用于计算点击率(统计)
Jun 30 #Javascript
基于jquery的图片懒加载js
Jun 30 #Javascript
CSS和Javascript简单复习资料
Jun 29 #Javascript
javascript与CSS复习(三)
Jun 29 #Javascript
javascript与CSS复习(二)
Jun 29 #Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 #Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
Jun 29 #Javascript
You might like
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
python实现密码强度校验
2020/03/18 Python
基于python实现查询ip地址来源
2020/06/02 Python
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
大学生思想汇报范文
2013/12/31 职场文书
关爱老人标语
2014/06/21 职场文书
浅谈MySQL函数
2021/10/05 MySQL
Python必备技巧之函数的使用详解
2022/04/04 Python