jQuery的在1.7+生活()与上()(jQuery live() vs on() in 1.7+

2019-06-26 14:09发布

我知道在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访问受影响的对象$(“#列表”)。

Answer 1:

一个漂亮的明确的答案,你会在官方找到文档 :

不再推荐.live()方法的使用,因为jQuery的更高版本提供没有它的缺点更好的方法。 具体而言,以下问题出现在使用.live()的:

  • jQuery的尝试调用之前检索由选择器指定的元素.live()方法,这可能是耗时的大型文档。
  • 链接方法不被支持。 例如, $("a").find(".offsite, .external").live( ... );无效的,并没有按预期工作。
  • 由于所有.live()事件在附加document元素,事件需要他们处理之前的最长和最慢的可能路径。
  • 调用event.stopPropagation()在事件处理程序处于停止的事件处理程序安装文件中下无效; 该事件已经传播到document
  • .live()方法与其他事件方法的方式,可奇怪的,例如,相互作用$(document).unbind("click")删除任何呼叫连接到所有的点击处理程序.live()


Answer 2:

它只是不正确传递一个对象作为第二个参数on

从文档 :

.on( events [, selector] [, data], handler(eventObject) )

它要求一个选择,而不是一个jQuery对象,所以你需要使用:

$(document.body).on('click', '#list', function() {
    console.log($(this));
});


文章来源: jQuery live() vs on() in 1.7+
标签: jquery live