-
答案 1:
bind() 是直接绑定在元素上,而 live() 是通过冒泡的方式来绑定到元素上。举两个应用场景来说明他们的存在:第一、有一个按钮,你想要用他来在点击的时候通过 AJAX 提交 form 的请求。因为这里只有一个按钮,只绑定一次,你并不需要冒泡这种更费力费资源的方式来冒泡到 document 再指定这个元素。第二、在一个有 20个以上,甚至更多个 li 的 ul 列表中,要让每一个 li 点击的时候都去触发相应函数的时候。如果给每个 li 都绑定一个 click 事件,这样是不是很蛋疼?这时通过 live()(当然更好是用 delegate() 这样的方法,可以指定一个离 li 更近的父节点),其实只在 document 上绑定一次 click() 事件,你省了 19 次绑定。这是多省内存的事。对吧?另外,有同学说两个会合起来,看完上面的解释,你觉得呢?哈哈。场景不同,我们需要选择不同的方式来解决问题,他们提供出来就是为了方便这种不同场景的应用,所以不应该被合并,也不会被合并。 -
答案 2:
本身两个提供的功能并不完全一样,正如文档中说的,.bind()只能对已有的元素绑定事件,而.live()能对未来插入的元素绑定事件。从jQuery发展历史来说,.bind()是从1.0版开始就已经提供了的,这是对事件绑定提供一个统一的接口。而后在1.3版之后,才提供了.live()。为了给事件绑定提供更多灵活性。当然,确实有可能在未来某个版本中合并成一个,通过给bind增加一个参数,内部调用live,来完成live的功能。但目前从1.4.3里新增的那个参数来看,似乎近期内不太可能了…… -
答案 3:
Best answer is here:alfajango.com/blog... , don"t trust city legend. -
答案 4:
不一样,live()可以实现动态绑定。例如:$elem.bind("click",fn)时候,所有的$elem点击都会触发fn,但是当我新插入一个节点$elem时,新节点并没有绑定click事件。live()就具备这样的功能。 -
答案 5:
性能神马的都是浮云 (因为 jQuery 优化得很不错), 重点是 1.4.4 前的 live() 的不支持 stopPropagation()http://jsfiddle.net/J4eUb/2/至于用哪一个是根据应用场景来区分的, 没有通用的规则 -
答案 6:
live() 是委托,事实上是绑定在父元素上,而bind()就是绑定在指定元素上 -
答案 7:
可以看看live/delegate的原理。blogjava.net/Hafeyang... -
答案 8:
1、bind是绑定已有元素,不支持动态绑定。live可以动态绑定事件2、1.4.4之前的live不支持stopPropagation(),bind支持。@Chris3、其实有些时候可以用clone(true)实现动态的绑定,当然这只适合元素结构大致相同的情况。 -
答案 9:
live()是jQuery 1.3中新增的方法。给所有当前以及 将来 会匹配的元素绑定一个事件处理函数(比如click事件)。也能绑定自定义事件。重点突出 “将来”。live()函数给所有当前以及将来(将来:可理解为用过ajax,js等插入的元素)会匹配的元素绑定一个事件处理函数。与bind()不同的是,live()一次只能绑定一个事件。 -
答案 10:
粗浅的认为:给a元素bind()一个事件b后,dom又动态添加了一个a元素,这时候bind()到前一个a元素上的事件就出发不了。需要用到live() -
答案 11:
前面人已经说过了 live() 和 bind() 的区别了,我补充下,还有个 delegate() 的,小范围的使用事件代理,用这个性能会比 live() 更好的 -
答案 12:
一定要注意,如果重复绑定的话,很可能会执行多次效果。比如说每添加一个 都live一下,那么之前的 点击一下会执行好几次--------------------------------------补充 2011-8-22-----------------------------------------------------可能之前没有说清楚。有的时候一段代码会重复加载,比如$(document).ready(function(){ $("#something").live("click",function(){ alert(); });});这样一段代码有的时候需要重复的加载,比如google map api调用的时候,比如做分布式web app的时候,代码互相独立,一旦这条语句重复出现,那么,当你点击something的时候便会alert()两次或多次。这是由jquery中live方式决定的,其会将这种数据结构以冒泡的方式压入内存,每当新建一个dom他都会自动检测,耗费资源、非常可能产生内存泄露!因为如果你中途remove掉了这个dom元素,按照jquery的源码来看他是没有先die之后解除live再删除dom的,所以要小心。我的意思是,在使用jquery中,如果页面是传统的,当然遇不到这种现象,这也就是为什么很多人很奇怪我的看法,因为代码都是单单出现一次被浏览器读取。但是如果是动态代码的情况,我个人推荐使用bind,虽然费事,但是可靠。 -
答案 13:
live() 能取代 bind()么? -
答案 14:
不会,两者功能不是一样的,live使用了冒泡方式来判断当前触发事件的对象,用的场景会少很多,相比bind有性能问题! -
答案 15:
live() 是针对执行时尚未加入dom tree的元素而设,是bind() 的拓展
jQuery 为什么要划分.bind()和.live()?
2012-01-19 19:30:14 来源: 点击:
相关热词搜索:
上一篇:中国的「死刑缓期两年执行」实际受刑多少年?而「无期徒刑」真的是无期的吗?
下一篇:想要学习 Lisp,应该看哪些书、上哪些论坛呢?