我知道在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));
});
控制台返回$(体)jQuery对象。 这是在这一点没用。 ;) 有任何想法吗?
编辑:这里的问题不在于如何从例1和2,但如何访问它例如3访问受影响的对象$(“#列表”)。
一个漂亮的明确的答案,你会在官方找到文档 :
不再推荐.live()方法的使用,因为jQuery的更高版本提供没有它的缺点更好的方法。 具体而言,以下问题出现在使用.live()的:
- jQuery的尝试调用之前检索由选择器指定的元素
.live()
方法,这可能是耗时的大型文档。 - 链接方法不被支持。 例如,
$("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));
});