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 相关文章推荐
XML的代替者----JSON
Jul 21 Javascript
几个javascript操作word的参考代码
Oct 26 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
解决ztree搜索中多级菜单展示不全问题
Jul 05 Javascript
JavaScript引用类型RegExp基本用法详解
Aug 09 Javascript
基于javascript实现贪吃蛇小游戏
Nov 25 Javascript
基于jQuery实现可编辑的表格
Dec 11 jQuery
Element InputNumber 计数器的实现示例
Aug 03 Javascript
解决vue watch数据的方法被调用了两次的问题
Nov 07 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php排序算法实例分析
2016/10/17 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
php数据序列化测试实例详解
2017/08/12 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
办公室助理岗位职责
2013/12/25 职场文书
文艺晚会主持词
2014/03/24 职场文书
国际贸易实训报告
2014/11/05 职场文书
运动会加油稿30字
2015/07/21 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL