jQuery中的bind() live() delegate()之间区别分析
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()之间区别分析的更多相关文章
- jQuery中的.bind()、.live()和.delegate()之间区别分析
jQuery中的.bind()..live()和.delegate()之间区别分析,学习jquery的朋友可以参考下. DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的 ...
- Jquery中的bind(),live(),delegate(),on()绑定事件方式
博客转载为作者:枫上善若水http://www.cnblogs.com/xilipu31/p/4105794.html 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到d ...
- 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...
- 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式 [转载]
前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...
- jQuery事件函数bind,live,delegate的区别
DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何 ...
- jQuery bind()与delegate()的区别
笔试题: bind()与delegate()的区别主要有三点: 1 绑定目标 .bind直接绑在目标元素上 .delegate绑在父元素上 2 监听个数 .bind监听个数多——每个目标元素都需要添 ...
- jQuery中attr和prop方法的区别说明
jquery中attr和prop的基本区别可以理解为:如果是内置属性,建议用prop,如果是自定义的建议用attr. 例如 <input type=check node=123 id=ck & ...
- jquery中的$().each和$.each的区别
jquery中的$().each和$.each的区别 注意:jquery中的$().each和$.each的区别,前者只能遍历数组,后者可以遍历数组和对象 备注:sinobook项目中地名本体相关地按 ...
- jQuery中attr和prop方法的区别
jQuery中attr和prop方法的区别。 http://my.oschina.net/bosscheng/blog/125833 http://www.javascript100.com/?p=8 ...
随机推荐
- Http中涉及到的知识点总结
1.URL地址 协议-> HTTP:超文本传输协议,除了用来传输文本,还可以传输HTML页面.CSS文件.JS文件.图片.音视频... HTTPS:SSL,它比HTTP更加安全一些 FTP:文件 ...
- sql语句清除mssql日志
DUMP TRANSACTION TestDB WITH NO_LOG 清除日志 DBCC SHRINKFILE ('TestDB_log',1) 收缩数据库文件 -----直接 ...
- 《Java核心技术卷二》笔记(三)正则表达式
正则表达式语法 一个正则表达式描述了字符串的构成规则(模式).如果一个具体的字符串正好符合正则表达式描述的这个规则,这个字符串就是与表达式匹配的.先看一下怎么描述这种规则,也就是正则表达式语法.正则表 ...
- PHP里用户密码的回复和管理
1). In /etc/my.ini, add skip-grant-tables 2). mysql -u root -p (no password required) mys ...
- Nginx 笔记与总结(9)rewrite 重写规则
重写的规则可以放在 serverer 里,也可以放在 location 里. rewrite 规则: 常用的命令有 ① if(条件){} 设定条件,再进行重写 if 语法: if 空格 (条件){ ...
- 根据设备宽高动态设置View的大小
得到设备屏幕宽高: WindowManager wManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); ...
- 【IOS笔记】Using View Controllers in Your App
参考:http://www.cnblogs.com/patientAndPersist/p/3279645.html Using View Controllers in Your App Whethe ...
- 9.PHP内核探索:通过mod_php5支持PHP
Apache对PHP的支持是通过Apache的模块mod_php5来支持的.如果希望Apache支持PHP的话,在./configure步 骤需要指定--with-apxs2=/usr/local/a ...
- Bit-Value Type
https://dev.mysql.com/doc/refman/5.7/en/bit-type.html MySQL 5.7 Reference Manual / ... / Bit-Val ...
- php数据缓存
用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set.get一下就完了.现在没框架可用了,只好自己动手写一个cache暂时用. 这个Cache类用 ...