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 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
深入剖析JavaScript面向对象编程
Jul 12 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
php输出全部gb2312编码内的汉字方法
Mar 04 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
js实现放大镜特效
May 18 Javascript
详解JS模块导入导出
Dec 20 Javascript
在vue中使用SockJS实现webSocket通信的过程
Aug 29 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
nuxt配置通过指定IP和端口访问的实现
Jan 08 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
GRID拖拽行的实例代码
2013/07/18 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
ES6新增的数组知识实例小结
2020/05/23 Javascript
python为tornado添加recaptcha验证码功能
2014/02/26 Python
python中ConfigParse模块的用法
2014/09/29 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
python字典的值可以修改吗
2020/06/29 Python
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
自我鉴定的范文
2013/10/03 职场文书
平面设计岗位职责
2013/12/14 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
总经理的岗位职责
2014/02/23 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
美术指导助理求职信
2014/04/20 职场文书
防沙治沙典型材料
2014/05/07 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP