jQuery中的bind() live() delegate()之间区别分析

首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图

1.bind方式

     $('a').bind('click',function (){
alert('click');
})

解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上

2.live方式

     $('a').live('click',function (){
alert('click');
})

解析:jq将函数绑定到$(document)元素上,并使用click和a作为参数,任何时候只要事件冒泡到document节点上,查出

它是否属于click事件,以及该事件的目标元素是否为a,这一css选择器是否匹配

live方法还可以绑定到具体的元素(或“context”)而不是document上滴呀

$('a',$('#container')[0]).live('click',function(){alert('click'))})

同时:

.live() 方法能对一个还没有添加进DOM的元素有效,

是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。

传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上

   //当我们通过jq添加div之后,在添加事件
$(document.body).append('<div class="test" id="btn" style=" background:green;">click</div>');
$("#btn").bind('click',function (){
alert('click');
})
//结果,正常运行; //但是如果你先定义事件,想这样的顺序
$("#btn").bind('click',function (){
alert('click');
})
$(document.body).append('<div class="test" id="btn" style=" background:green;">click</div>');
//结果,没有绑定事件,没有弹出click //解决方法是使用:live()
$("#btn").live('click',function (){
alert('click');
}) //当然,如果你把它放在后面,效果也是可以滴呀
$(document.body).append('<div class="test" id="btn" style=" background:green;">click</div>'); //live运行完以后不释放空间,太多的使用会占用更多的内存,bind()则点击完以后释放空间

  bind方法可以绑定任何JavaScript的事件,而live方法在jQuery1.3的时候只支持click, dblclick, keydown, keypress,keyup,mousedown,

mousemove, mouseout, mouseover, 和 mouseup.在jQuery 1.4.1中,甚至也支持 focus 和blue事件了(映射到更合适,

并且可以冒泡的  focusin和focusout上)。另外,在jQuery 1.4.1中,也能支持hover(映射到"mouseenter,mouseleave)

(2)live() 并不完全支持通过DOM遍历的方法找到的元素。取而代之的是,应当总是在一个选择器后面直接使用 .live()方法。

(3)当一个元素采用live方法进行事件的绑定的时候,如果想阻止事件的传递或冒泡,就要在函数中return false,仅仅调用

stopPropagation()是无法实现阻止事件的传递或者冒泡的;

ps:live方法有一个非常大的缺点,那就是它仅能针对直接的CSS选择器做操作。

3.delegate

    $('#container').delegate('a','click',function (){
alert('click');
})

解析: jq扫描文档查找$("#container"),并使用click事件和a这一css选取器作为参数把函数绑定到$("#container")上,

任何时候,只要事件冒泡到$("#container")上,它就查找该事件是否是click,以及该事件的目标元素是否与css选取器上

匹配。

 

jQuery中的bind() live() delegate()之间区别分析的更多相关文章

  1. jQuery中的.bind()、.live()和.delegate()之间区别分析

    jQuery中的.bind()..live()和.delegate()之间区别分析,学习jquery的朋友可以参考下.   DOM树   首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的 ...

  2. Jquery中的bind(),live(),delegate(),on()绑定事件方式

    博客转载为作者:枫上善若水http://www.cnblogs.com/xilipu31/p/4105794.html 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到d ...

  3. 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式

    前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...

  4. 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式 [转载]

    前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...

  5. jQuery事件函数bind,live,delegate的区别

    DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何 ...

  6. jQuery bind()与delegate()的区别

    笔试题: bind()与delegate()的区别主要有三点: 1 绑定目标 .bind直接绑在目标元素上 .delegate绑在父元素上 2  监听个数 .bind监听个数多——每个目标元素都需要添 ...

  7. jQuery中attr和prop方法的区别说明

    jquery中attr和prop的基本区别可以理解为:如果是内置属性,建议用prop,如果是自定义的建议用attr. 例如 <input type=check  node=123 id=ck & ...

  8. jquery中的$().each和$.each的区别

    jquery中的$().each和$.each的区别 注意:jquery中的$().each和$.each的区别,前者只能遍历数组,后者可以遍历数组和对象 备注:sinobook项目中地名本体相关地按 ...

  9. jQuery中attr和prop方法的区别

    jQuery中attr和prop方法的区别。 http://my.oschina.net/bosscheng/blog/125833 http://www.javascript100.com/?p=8 ...

随机推荐

  1. MySQL 用户管理——权限表

    权限表 权限表存放在mysql数据库中 user表结构 用户列:Host.User.Password 权限列:*priv 资源控制列:max* 安全列:其余   db表 存储了用户对某个数据库的操作权 ...

  2. NSOperationQueue

    一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...

  3. 图解classloader加载class的流程及自定义ClassLoader

    图解classloader加载class的流程及自定义ClassLoader 博客分类: JVM JavaJVM虚拟机EXTSUN /** *  转载请注明作者longdick    http://l ...

  4. android开发事件监听

    第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适, ...

  5. Mui - 全局css

    头部(mh) <header class="mui-bar mui-bar-nav"> <a class="mui-action-back mui-ic ...

  6. CSV to XLSX (专用)

    $csvFile = "F:\ACL\HZ ACL\ACL-APAC.CSV" $path = "F:\ACL\HZ ACL\ACL-APAC.XLSX" $r ...

  7. Go项目的目录结构说明

    一.项目目录结构 GoPath    /bin    /pkg    /src project_1      project_2 ...... project_n GoPath : 相当于donet下 ...

  8. 《Java核心技术卷二》笔记(三)正则表达式

    正则表达式语法 一个正则表达式描述了字符串的构成规则(模式).如果一个具体的字符串正好符合正则表达式描述的这个规则,这个字符串就是与表达式匹配的.先看一下怎么描述这种规则,也就是正则表达式语法.正则表 ...

  9. [ZZ] Cache

    http://blog.sina.com.cn/s/blog_6472c4cc0102duzr.html 处理器微架构访问Cache的方法与访问主存储器有类似之处.主存储器使用地址编码方式,微架构可以 ...

  10. nor flash和nand flash的区别

    NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了 ...