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 相关文章推荐
让textarea控件的滚动条怎是位与最下方
Apr 20 Javascript
JavaScript Cookie 直接浏览网站分网址
Dec 08 Javascript
使用javascript获取flash加载的百分比的实现代码
May 25 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
Nov 19 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
巧用jQuery选择器提高写表单效率的方法
Aug 19 Javascript
微信小程序 教程之注册程序
Oct 17 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
微信小程序位置授权处理方法
Jun 13 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 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
当海贼王变成JOJO风
2020/03/02 日漫
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
PHP实现微信提现功能
2018/09/30 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
Python 条件判断的缩写方法
2008/09/06 Python
python实现划词翻译
2020/04/23 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
Python松散正则表达式用法分析
2016/04/29 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
C#公司笔试题
2014/03/28 面试题
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
如何写一个自定义标签
2012/12/28 面试题
加工操作管理制度
2014/01/19 职场文书
大学新学期计划书
2014/04/28 职场文书
承诺书格式范文
2014/06/03 职场文书
李强感恩观后感
2015/06/17 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js