jquery中事件委派代码分析

什么是jquery中的事件委派?

在jquery中有一个很重要的概念——事件委派,相信很多搞前端开发的人都听说过,零度逍遥本来对此不是十分理解,但经过一个高人的指点后,才发现这个功能还是蛮强大的,今天就给大家分享一下。

事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。

说的有点抽象,按照惯例,还是举个例子说明:

 代码如下 复制代码

<ul class="list">
    <li>11111<li>
    <li>222222<li>
    <li>3333<li>
    <li>4444<li>
</ul>

这是一个ul,里面包含4个li,如果想要给li加上点击事件,弹出一些内容,我们一般这样写:

$('.list li').click(function(){
    alert(1111);
})

这样当我们点击list里面的任何一个li都可以弹出‘1111’,但这样做有两个弊端:

1.很耗费资源,因为这种方式是给每个li都加上了事件,li的个数少的话还没事,如果li多的话会很耗费资源。

2.如果后期动态添加li,不会拥有这个弹出事件。

针对以上问题,可以用事件委派来解决,我们完全可以写出这样一段代码:

 代码如下 复制代码

$(".list").delegate("li", "click", function(){   
alert(1111);
});

这个就是jquery的事件委派,有的时候还是很能派上用场的,骚年们,玩起来吧!

.live()与流行的liveQuery插件很像,但有以下几个主要区别:
* .live 目前只支持所有事件的子集,支持列表参考上面的说明。
* .live 不支持liveQuery提供的“无事件”样式的回调函数。.live只能绑定事件处理函数。
* .live 没有"setup"和"cleanup"的过程。因为所有的事件是委派而不是直接绑定在元素上的。

HTML 代码:

 代码如下 复制代码

<p>Click me!</p>

$("p").live("click", function(){
$(this).after("<p>Another paragraph!</p>");
});

事件委派一次绑定多种事件

一次性绑定多个事件,根据事件类别委派相应的操作
为了更好地优化上面的代码,可以通过事件委派来修改代码,修改后的代码如下:

 代码如下 复制代码

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对象之上,在代码的内部通过判断事件的类别来委派不同的处理代码。这样可以避免代码的重复定义,以达到避免时间冗余的效果。

事件委派、传递 

当列表里的一列被点击,新的列被加入列表。如果想让新加入的列也具有相同的事件控制,我们可以使用事件委派,把事件处理方法传递给新的列。

 代码如下 复制代码

$(document).ready(function() {
  $('#list2').click(function(event) {//注意:这里加入了参数:event
  var $newLi = $('<li class="special"><button>新按钮</button></li>');
  var $tgt = $(event.target); //注意:这里用到target函数
  if ($tgt.is('button')) {
    $tgt.parent().after($newLi);
  }//这里用到,is()函数来判断当前点击元素的属性,如果是按钮就触发事件。
  });
});

时间: 2024-10-27 18:38:12

jquery中事件委派代码分析的相关文章

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

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

jQuery中animate用法实例分析

 这篇文章主要介绍了jQuery中animate用法,实例分析了animate的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了jQuery中animate用法.分享给大家供大家参考.具体如下: 这是一个简单的animate函数尝试.代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <script type="text/javascript"> $(document).ready

jQuery中noConflict()用法实例分析

 这篇文章主要介绍了jQuery中noConflict()用法,实例分析了noConflict()的功能.定义及相关使用技巧,需要的朋友可以参考下     本文实例讲述了jQuery中noConflict()用法.分享给大家供大家参考.具体分析如下: jQuery默认使用"$"操作符,$ 符号只是 window.jQuery 对象的一个引用,jQuery.noConflict() ,这个函数将变量$的控制权让渡给第一个实现它的那个库.这有助于确保jQuery不会与其他库的$对象发生冲突

JQuery中serialize()用法实例分析

 这篇文章主要介绍了JQuery中serialize()用法,实例分析了serialize()方法的功能.定义及相关使用技巧,需要的朋友可以参考下     本文实例讲述了JQuery中serialize()用法.分享给大家供大家参考.具体分析如下: 一.serialize()定义和用法: serialize()方法通过序列化表单值,创建标准的URL编码文本字符串,它的操作对象是代表表单元素集合的jQuery 对象.你可以选择一个或多个表单元素(比如input或文本框),或者 form 元素本身.

jQuery中事件与动画的总结分享_jquery

1.加载DOM 1.1.window事件 window.onload=function(){}.... 时机:其他资源都加载完毕后,再执行 $(function(){}) --:只是等待标签完毕,即可执行 区别:前者在HTML页面中只能解析最后一个,二后者是N个 window.onload() = function () { } $(function () { $("li").bind("click", function () { $(this).css("

jQuery中$.click()无效问题分析

 今天做表格前台导出到xls时,想自动触发a的点击.但失败.最后找到这个文件. 我尝试过多次用jQuery模拟用户点击a标签的功能,但都没有成功,并且困扰了很久.前段时间的一次发呆,冒出了新的想法,于是就动手进行了测试. 先看下边的代码: 代码如下: <html> <head>磨途歌-A标签测试1<head> <body> <a href="http://blog.mo2g.com">磨途歌<a> </bod

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

于是乎,在日常的开发中大量使用连缀写法,而事件方法连缀就是一个特例.若给一个Dom对象使用了绑定了多个事件,便于阅读和书写,习惯了使用连缀写法,但这样的书写方式会造成时间的冗余. 1.事件冗余:多个事件方法中多次调用相同的代码 下面的代码是一个事件方法连缀的写法: 复制代码 代码如下: jQuery(function($) { $('<div id="livetip"></div>').hide().appendTo('body'); var tipTitle

jQuery中DOM操作实例分析_jquery

本文实例讲述了jQuery中DOM操作的方法.分享给大家供大家参考.具体分析如下: 这里主要设计的dom操作包括:dom对象的创建(JS方式和jquery方式).属性的修改.样式的修改.动态绑定事件 代码如下: 复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript" src="jquery-1.3.

jQuery中ajax错误调试分析_jquery

jQuery中把ajax封装得非常好.但是日常开发中,我偶尔还是会遇到ajax报错.这里简单分析一下ajax报错 一般的jQuery用法如下,ajax通过post方式提交"汤姆和老鼠"这段数据到xxx.php文件中.成功后则打印返回的数据,失败则打印错误原因. $.ajax({ url:"xxx.php", type:"post", datatype:"json", data:{"cat":"to