原文链接:点我

我们知道jquery提供了四种事件监听方式,分别是bind、live、delegate、on,下面就分别对这四种事件监听方式分析。

已知有4个列表元素:

  列表元素1

  列表元素2

  列表元素3

  列表元素4

1.bind

bind(type,[data],function(eventObject))  bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,

参数函数如下:

type:事件类型,如click、change、mouseover等;

data:传入监听函数的参数,通过event.data取到;

function:监听函数,可传入event对象,这里的event是jquery封装的event对象。

源码:

 bind: function( types, data, fn ) {

 return this.on( types, null, data, fn );

 }

可以看到内部是调用了on方法。

bind的特点就是会把监听器绑定到目标元素上,有一个邦一个,在页面上的元素不会动态添加的时候使用它没有什么问题。

但如果列表中动态增加一个“列表5”,点击它是没有反应的,必须再bind一次才行。

测试代码:

 $(function(){
$('div').bind('click',function(){
if($(this).text()=='列表4'){
$(this).after('<div>列表5</div>');
}
alert($(this).text());
})
8 })

注意:jquery中append()和after()方法都可以添加元素,不同之处是append()是在要添加元素的末尾(在元素内)添加,而after()是在要添加的元素之后(在元素外)。

2.live

live(type, [data], fn)

live的参数和bind一样,它又有什么蹊跷呢,我们还是先瞄一眼源码:

 live: function( types, data, fn ) {

 jQuery( this.context ).on( types, this.selector, data, fn );

 return this;
}

可以看到live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了。

通过 live() 方法添加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素),

使用事件委托的优点一目了然,新添加的元素不必再绑定一次监听器。

将上面代码中的bind改为live后,点击列表5就可以弹出“列表5”了。

注意:live方法在在 jQuery 版本 1.7 中被废弃,在版本 1.9 中被移除,官方建议使用on代替。

测试代码:

 $(function(){
$('div').live('click',function(){
if($(this).text()=='列表4'){
$(this).after('<div>列表5</div>');
}
alert($(this).text());
})
})

3.delegate
    将监听事件绑定在就近的父级元素上,
源码:

 delegate: function( selector, types, data, fn ) {       

  return this.on( types, selector, data, fn );
}

delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,

并规定当这些事件发生时运行的函数。
这下,我们的选择又多了一些灵活性,不单可以利用事件委托,还可以选择委托的对象。
代码,实现效果,点击div,两个p标签的文字颜色都发生变化。 <div>

   <p>div内的p标签</p>
</div>
<p>div外的p标签</p>
$(function(){
$('div').delegate('p','click',function(){
$('p').css('color','blue');
});

4、on
   on(type,[selector],[data],fn)
参数与delegate差不多但还是有细微的差别,首先type与selector换位置了,其次selector变为了可选项。
on() 方法在被选元素及子元素上添加一个或多个事件处理程序。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。
代码,实现效果同上,把delegate改为on,第一个参数为click,第二个参数p可写可不写,第三个参数同上。

 $(function(){
$('div').on('click','p',function(){
$('p').css('color','red');
});

jQuery中四种事件监听的区别的更多相关文章

  1. Android点击Button按钮的四种事件监听方法总结

    首先我们在activity_main.xml里面先定义一个Button空间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <RelativeLayout xmlns:a ...

  2. jQuery EasyUI/TopJUI输入框事件监听

    jQuery EasyUI/TopJUI输入框事件监听 代码如下: <div data-toggle="topjui-panel" title="" da ...

  3. 从jQuery的缓存到事件监听

    不知道大家有没有发现,用jQuery选择器"选择"之后的DOM上会添加jQuery*********属性. <DIV id=d1 jQuery1294122065250=&q ...

  4. VMware中四种网络连接模式的区别

    安装好VMwareWorkstations之后,进行虚拟机网络配置时有四种网络连接方式,桥接.仅主机.NAT.LAN区段. 之所以有不同的模式,在我看来是为了满足不同的网络需求,总的来说:桥接.NAT ...

  5. Android 开发中的View事件监听机制

    在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...

  6. onscroll事件没有响应的原因以及vue.js中添加onscroll事件监听的方法

    1 onscroll事件失效 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. clipboard 在 vue 项目中,on 事件监听回调多次执行

    clipboard 定义一个全局变量 import ClipboardJS from "clipboard"; if(clipboard){ clipboard.destroy() ...

  8. java中的key事件监听机制

    package com.at221; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.sw ...

  9. jquery easyui控件事件监听委托给jquery事件监听,keyup取最新值问题

    <div id="<?php echo NS; ?>toolbar"> <div style="padding:5px"> ...

随机推荐

  1. WIZnet相关产品介绍

    WIZnet  自1998年在韩国创立以来,一致专注研发全硬件TCP/IP协议栈芯片.同一时候开发设计相关网络模块和无线产品,同一时候 WIZnet 鼓舞开源硬件.相关开源硬件产品也已层出不断. 主要 ...

  2. libevent的使用(socket)

    这篇文章介绍下libevent在socket异步编程中的应用.在一些对性能要求较高的网络应用程序中,为了防止程序堵塞在socket I/O操作上造成程序性能的下降,须要使用异步编程,即程序准备好读写的 ...

  3. 2014 Unity3d大会的部分总结

    一.项目开发.管理和公布策略 1.       四大准则 a.       美术的资源量 b.       美术规范,要依据开发什么样的游戏制定统一的规范,这样尽可能的形成统一的规范.然后程序要协助美 ...

  4. sql server management studio 快速折叠object explorer中的instance

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6e20fa7a-c0a9-496b-89b2-19c6bd996ffc/how-to ...

  5. php中file_get_contents如何读取大容量文件

    php中file_get_contents如何读取大容量文件 一.总结 一句话总结:使用file_get_contents()进行分段读取,file_get_contents()函数可以分段读取 1. ...

  6. mysql创建新用户时 连接报错 (解决方案把匿名用户删除)

    ERROR (): Access denied for user 'ljcc'@'localhost' (using password: YES) 步骤 创建了mysql的用户 insert mysq ...

  7. springmvc 1.接受日期类型的参数 2.后台返回json串的格式处理(返回json串null值处理为"")

    springmvc中的配置: <bean id="dateConvert" class="com.iomp.util.DateConvert"/> ...

  8. iOS菜鸟成长笔记(3)——斯坦福公开课学习(1)

    一.iOS四层结构 1.Core OS 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Unix核心.这一层包含或者说是提供了整个iPhone OS的一些基础功能, ...

  9. OpenGL编程逐步深入(五)Uniform 变量

    准备知识 在这个教程中我们会遇到一种新的Shader变量类型,即uniform变量.attribute(属性)变量和uniform变量的不同之处在于attribute 变量中包含顶点的具体数据,当每次 ...

  10. View简介

    1.View 是所有widget类的基类 2.View的坐标 根据上面的图应该会比较容易明白,图中屏幕上放了一个ViewGroup布局,里面有个View控件 getTop:获取到的,是view自身的顶 ...