jquery中有四种事件绑定函数,bind(),live(),on(),delegate(),由于live现在并不常用,因此不做过多解释。

1. bind()用法

$("div p").bind("click",function(){
alert("点击");
});
同:
$("div p").click(function(){
alert("点击");
});
这里为div绑定了click事件,相应为弹出内容,绑定简单快捷,但是存在两个问题:
1;用了隐式迭代方法,如果匹配的元素特别多,例如div中有多个p标签,方法就绑定多次,影响性能。
2;对于尚未存在的元素无法绑定,点击页面上的按钮,将动态添加一个p元素,点击这个p元素会发现动作没有响应。
用delegate方法可以解决以上问题。 2.delegate()用法
$("div").delegate("p", "click", function () {
alert($(this).text());
});

这种方式采用了事件委托概念,不直接为p元素绑定事件而是为其父元素(或者祖先元素也可)绑定事件,当在div内点击任意元素时,事件一层层根据event target向上冒泡,直到到达绑定事件的元素,在冒泡过程中,如果事件的currentTarget与选择器匹配,就会执行代码。

这样就解决了bind()的问题,不用再一个个为p元素绑定事件,也可以为动态添加进来的p元素绑定,甚至如果将事件绑定到document上,不用等document准备就可以执行绑定。不过冒泡的方式也有会存在性能问题。

3.on()用法

on()将之前的绑定事件方法做了统一无论bind()还是delegate()其实都是通过on()方法实现的,只是参数不同罢了。因此我在工作中用的比较多的是on()。

on()在1.7版本之后出现。以上的代码便可以如下来改写:

$("div").on("click","p",function(){
alert($(this).text());
})

有绑定事件自然也有移除事件,以上的方法对应的解绑事件分别是:

$( "div p" ).unbind( "click", handler );
$( "div" ).undelegate( "p", "click", handler );
$( "div" ).off( "click", "p", handler );

当然我们可以根据自己的需要来选用合适的方法,需要注意的是:

1.选择器匹配到的元素比较多时,不要用bind()迭代绑定。

2.用id选择器时可以用bind()。

3.需要给动态添加的元素绑定事件时,用delegate(),或者on()。

4.用delegate(),和on(),dom树不要太深。

5.尽量使用on()

 

jQuery事件绑定on()、bind()与delegate() 方法详解的更多相关文章

  1. JQuery事件绑定,bind与on区别

    jquery事件绑定bind:向匹配元素添加一个或多个事件处理器 $(selector).bind("click",data,function); live:向当前或未来的匹配元素 ...

  2. jQuery三种事件绑定方式.bind(),.live(),.delegate()

    .bind(), .live(), 和 .delegate()之间的区别并不明显.但是理解它们的不同之处有助于写出更简洁的代码,并防止我们的交互程序中出现没有预料到的bug. 基础 DOM树 首先,图 ...

  3. jquery 事件委托三种事件绑定方式.bind(),.live(),.delegate()

    http://www.ituring.com.cn/article/467# http://www.cnblogs.com/lvdabao/archive/2013/08/30/3290603.htm ...

  4. Jquery ajax提交表单几种方法详解

    [导读] 在jquery中ajax提交表单有post与get方式,在使用get方式时我们可以直接使用ajax 序列化表单$( 表单ID) serialize();就行了,下面我来介绍两个提交表单数据的 ...

  5. jquery .post .get中文参数乱码解决方法详解

    jquery默认的编码为utf-8,做项目时有时处于项目需要用到ajax提交中文参数,乱码问题就很头疼了,折腾了许久终于弄出来了.为了便于传输,我们首先将需要用到的参数用javascript自带的函数 ...

  6. jQuery事件绑定—on()、bind()与delegate()

    啃了一段日子的js相关了,学的过程中发现在jQuery中绑定事件时,有人用bind(),有人用on(),有人用delegate(),还有人用live(),看代码的时候觉得都实现功能了也就掀过去了,只是 ...

  7. 深入学习jQuery事件绑定

    × 目录 [1]bind [2]trigger [3]delegate[4]on[5]one 前面的话 javascript有HTML.DOM0级.DOM2级和IE这四种事件处理程序,而jQuery对 ...

  8. jQuery 事件绑定 和 JavaScript 原生事件绑定

    总结一下:jQuery 事件绑定 和 JavaScript 原生事件绑定 及 区别 jQuery 事件绑定 jQuery 中提供了四种事件监听绑定方式,分别是 bind.live.delegate.o ...

  9. jQuery事件绑定和委托实例

    本文实例讲述了jQuery事件绑定和委托.分享给大家供大家参考.具体方法如下: jQuery事件的绑定和委托可以用多种方法实现,on()  . bind()  . live()  . delegate ...

随机推荐

  1. response.write();改变页面布局的原因及解法

    Response.Write ,在ASP.NET 中不要随便使用 Response.Write,其原因是它会打乱 ASP.NET 的输出流顺序,在aspx.cs 中使用 Response.Write ...

  2. C#开发Windows服务 入门

    Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序. 服务可以在计算机启动时自动启动,可以暂停和重新启动而且 ...

  3. 坑爹的 SONY AS100V GPS

    事情是这样的,为了记录自己的生活,也是出于对视频编辑的兴趣,买了一台 SONY 的 AS100V 运动摄像机. 公司到货,回家路上拍了一段,回家兴冲冲的连上电脑,想看看 GPS 数据,发现是 SONY ...

  4. BigDecimal使用中的坑

    1.BigeDecimal调用divide时一定要记得规定小数位数的保留情况,不然除不尽的时候报错. 2.使用该种BigeDecimal时,加减乘除都要使用它内部封装好的方法,不然容易报错.

  5. [To do]Appx Package installed, can't start at first time

    When installed partition tool & mkrcvcd as windows store app. it can't start at first time. the ...

  6. Breeze库API总结(Spark线性代数库)(转载)

    导入 import breeze.linalg._ import breeze.numerics._ Spark Mllib底层的向量.矩阵运算使用了Breeze库,Breeze库提供了Vector/ ...

  7. oracle迁移postgres之-Ora2Pg

    描述 Ora2Pg:甲骨文PostgreSQL数据库模式转换器是一个免费的工具用于Oracle数据库迁移到PostgreSQL兼容模式.它连接Oracle数据库,扫描它自动提取其结构或数据,然后生成S ...

  8. android 时间 格式

    http://blog.csdn.net/yudajun/article/details/7939552

  9. AngularJS中使用$resource

    这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数据源进行交互,当同支持RESTful的数据模型一起工作时,它就派上用场了.      REST是Representat ...

  10. 复旦高等代数 I(16级)思考题

    思考题的说明 一.本学期高代I的思考题面向16级的同学,将不定期地进行更新; 二.欢迎16级的同学通过微信或书面方式提供解答图片或纸质文件给我,优秀的解答可以分享给大家: 三.请大家先独立解答思考题, ...