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 相关文章推荐
javascript 按回车键相应按钮提交事件
Nov 02 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
Dec 21 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
Dec 24 Javascript
原生javascript实现图片无缝滚动效果
Feb 12 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
Sep 11 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
9个JavaScript日常开发小技巧
Oct 06 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
用PHP和ACCESS写聊天室(八)
2006/10/09 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
基于JavaScript 类的使用详解
2013/05/07 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
python模拟事件触发机制详解
2018/01/19 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
python实现flappy bird游戏
2018/12/24 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
python实现五子棋人机对战游戏
2020/03/25 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
求职自荐信格式
2013/12/04 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
javascript函数式编程基础
2021/09/15 Javascript