jQuery 通过事件委派一次绑定多种事件,以减少事件冗余_jquery

于是乎,在日常的开发中大量使用连缀写法,而事件方法连缀就是一个特例。若给一个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.jb51.net/js/event_delegation/index.html
打包下载 http://www.jb51.net/jiaoben/28044.html

时间: 2024-09-14 21:34:50

jQuery 通过事件委派一次绑定多种事件,以减少事件冗余_jquery的相关文章

jquery中事件委派代码分析以及jQuery中delegate和on的用法与区别详细解析

jquery中事件委派我们会使用到delegate与live方法了,下面我就以delegate与live方法为例子给各位分析一下jquery 事件委派的例子吧,希望例子能帮助到各位朋友. 什么是jquery中的事件委派? 在jquery中有一个很重要的概念--事件委派,相信很多搞前端开发的人都听说过,零度逍遥本来对此不是十分理解,但经过一个高人的指点后,才发现这个功能还是蛮强大的,今天就给大家分享一下. 事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素. 说

jquery中事件委派代码分析

什么是jquery中的事件委派? 在jquery中有一个很重要的概念--事件委派,相信很多搞前端开发的人都听说过,零度逍遥本来对此不是十分理解,但经过一个高人的指点后,才发现这个功能还是蛮强大的,今天就给大家分享一下. 事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素. 说的有点抽象,按照惯例,还是举个例子说明:  代码如下 复制代码 <ul class="list">     <li>11111<li>    

JQUERY中ON方法(事件委派机制)详解

前言 在开发项目的时候,JQuery的使用极其广泛,如果脑海中没有一点JQuery的基础知识,随性编写,那么就有可能造成bug问题.JQuery 1.4版本之后新增了on方法,这个用得比较多,为此我特地做了个总结,有需要的伙伴们可以好好的看一下这篇文章.on方法是专门用来处理事件委派机制的,笼统的说就是解决在你Ajax或者Pjax之后事件无法绑定到新添加的元素上的问题的,很多JQuery中的bug问题也都出现在这. 需求分析 1.解决Ajax或者Pjax之后导致点击事件失效问题. 效果图 1.当

jQuery支持动态参数将函数绑定到事件上的方法

这篇文章主要介绍了jQuery支持动态参数将函数绑定到事件上的方法,实例分析了两种支持动态参数的函数绑定技巧,需要的朋友可以参考下     本文实例讲述了jQuery支持动态参数将函数绑定到事件上的方法.分享给大家供大家参考.具体分析如下: 下面的js代码提供了两种方法用于绑定函数到事件,其中方法二可以传递动态参数,非常实用 ? 1 2 3 4 5 6 7 8 9 //方法一 $('#foo').click(function(event) { alert('User clicked on "fo

jQuery给动态添加的元素绑定事件的方法

 这篇文章主要介绍了jQuery给动态添加的元素绑定事件的方法,对比了jQuery中事件绑定的方法以及常见版本使用绑定的区别,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了jQuery给动态添加的元素绑定事件的方法.分享给大家供大家参考.具体分析如下: jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这里介绍jQuery中如何给

jQuery页面元素动态添加后绑定事件丢失方法,非 live_jquery

代码1: 以此方法绑定的input框事件,在通过add按钮后用jquery绑定的事件 alert就会丢失 <input type="button" value="Add" name="test_but" /> <div id="test_div"><input name="test_input"/></div> <script> $('input[

jQuery hover事件简单实现同时绑定2个方法_jquery

本文实例讲述了jQuery hover事件简单实现同时绑定2个方法.分享给大家供大家参考,具体如下: 这里将hover事件同时挂2个方法: 1个是悬停的时候执行的,另外一个是离开的时候执行 代码如下: $(document).ready(function() { $("#orderedlist li").hover( function() {$(this).addClass("blue");}, function() {$(this).removeClass(&qu

Jquery对新插入的节点 绑定Click事件失效的解决方法_jquery

1.有人说用 Live, 事实上现在最新的Jquery已经不支持 Live 了.live的解决方法如下: 你可以看这个 也可以不看 ,只是做到心中有数就可以了.下面介绍ON的方法. live:Live的使用介绍 2.有人用了ON 来解决, 这个解决方法基本在理. On :On的介绍,能解决问题 On的方法,基本能解决问题,但是你也要根据你的具体情况做选择.并不是每个人的代码都像上面这个案例描述的那么简单.但是万变不离其宗. 我是这样来做的,最终把问题解决了.  我有一个UL 标签是静态的,就是说

浅析jQuery事件之on()方法绑定多个选择器,多个事件_jquery

$(document).on('click', '#header .top, #main .btn', function () { // code... }); on()方法绑定多个事件   $("table.planning_grid").on({ mouseenter: function() { // Handle mouseenter... }, mouseleave: function() { // Handle mouseleave... }, click: function