我从不使用live
;我考虑使用的好处delegate
如此巨大以至于压倒性的。
其好处之一是live
是它的语法非常接近bind
:
$('a.myClass').live('click', function() { ... });
delegate
但是,使用稍微更详细的语法:
$('#containerElement').delegate('a.myClass', 'click', function() { ... });
然而,在我看来,这似乎更明确地说明了实际发生的情况。你没有意识到从live
事件实际上被捕获的示例document
; with delegate
,很明显事件捕获发生在#containerElement
。你可以做同样的事情live
,但语法变得越来越可怕。
为要捕获的事件指定上下文也可以提高性能。随着live
例如,整个文档的每次点击都必须与选择器进行比较a.myClass
看看是否匹配。和delegate
,这只是其中的元素#containerElement
。这显然会提高性能。
最后,live
要求您的浏览器寻找a.myClass
目前是否存在. delegate
仅在事件触发时查找元素,从而提供进一步的性能优势。
NB delegate
uses live
在幕后,所以你可以做任何事情live
你可以用delegate
。我的回答涉及它们,因为它们是常用的。
还要注意的是,两者都不是live
nor delegate
是现代 jQuery 中进行事件委托的最佳方式。新语法(从 jQuery 1.7 开始)是on http://api.jquery.com/on/功能。语法如下:
$('#containerElement').on('click', 'a.myClass', function() { ... });