jQuery live()vs on on(1.7+)
我知道从jQuery 1.7开始,不推荐使用.live()方法。 所以这就是我提出的:
$(document.body).on('click', '#list', function() { console.log($(this)); });
这几乎是诀窍,相当于:
$('#list').live('click', function(){ console.log($(this)); });
它们都返回#list jQuery对象,这就是我想要的。 然而问题是当我将jQuery对象作为第二个参数而不是字符串(经常发生)传递时,例如:
var list = $('#list'); $(document.body).on('click', list, function() { console.log($(this)); });
控制台返回$(body) jQuery对象。 那点上没用。 ;) 有任何想法吗?
编辑:这里的问题不是如何从示例1和2访问受影响的对象$(’#list’),而是如何在示例3中访问它。
您将在官方文档中找到一个非常明确的答案:
不再推荐使用.live()方法,因为更高版本的jQuery提供了没有缺点的更好的方法。 特别是,使用.live()会出现以下问题:
- 在调用
.live()
方法之前,jQuery尝试检索选择器指定的元素,这在大型文档上可能很耗时。- 不支持链接方法。 例如,
$("a").find(".offsite, .external").live( ... );
无效,无法按预期工作。- 由于所有
.live()
事件都附加在document
元素上,因此事件在处理之前会占用最长和最慢的路径。- 在事件处理程序中调用
event.stopPropagation()
对于停止附加在文档中较低位置的事件处理程序是无效的; 该事件已经传播到document
。.live()
方法以令人惊讶的方式与其他事件方法交互,例如,$(document).unbind("click")
删除通过对.live()
任何调用附加的所有点击处理程序!
将对象作为第二个参数传递给on
是完全错误的。
来自文档 :
.on( events [, selector] [, data], handler(eventObject) )
它要求使用选择器而不是jQuery对象,因此您需要使用:
$(document.body).on('click', '#list', function() { console.log($(this)); });