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 关键词高亮(根据ID/tag高亮关键字)案例介绍
Jan 21 Javascript
js点击button按钮跳转到另一个新页面
Oct 10 Javascript
jquery-tips悬浮提示插件分享
Jul 31 Javascript
AngularJS使用ngMessages进行表单验证
Dec 27 Javascript
jQuery Ajax 全局调用封装实例代码详解
Jun 02 Javascript
vue模块拖拽实现示例代码
Mar 09 Javascript
微信小程序下拉菜单效果的实例代码
May 14 Javascript
小程序登录/注册页面设计的实现代码
May 24 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
原生JS实现弹幕效果的简单操作指南
Nov 10 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
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
jQuery 源码分析笔记
2011/05/25 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
python实现下载指定网址所有图片的方法
2015/08/08 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Python 实现try重新执行
2019/12/21 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Python实现对adb命令封装
2020/03/06 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
新闻学专业应届生求职信
2013/11/08 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
2014年人事科工作总结
2014/11/19 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书