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 相关文章推荐
event.srcElement+表格应用
Aug 29 Javascript
JavaScript 全角转半角部分
Oct 28 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
js中有关IE版本检测
Jan 04 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
Js 回车换行处理的办法及replace方法应用
Jan 24 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
ES6学习教程之对象的扩展详解
May 02 Javascript
使用watch监听路由变化和watch监听对象的实例
Feb 24 Javascript
vue.js 获取select中的value实例
Mar 01 Javascript
JavaScript交换两个变量方法实例
Nov 25 Javascript
原生JS实现京东查看商品点击放大
Dec 21 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
php5中类的学习
2008/03/28 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
js实现头像上传并且可预览提交
2020/12/25 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python三元运算实现方法
2015/01/12 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
《白鹅》教学反思
2014/04/13 职场文书
金融专业求职信
2014/08/05 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
教师党员个人整改措施
2014/10/27 职场文书
上课说话检讨书
2015/01/27 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
Docker下安装Oracle19c
2022/04/13 Servers