如何将jQuery .live()转换为.on()与绑定到此的事件?

时间:2011-11-30 22:22:09

标签: javascript jquery

我正在将代码从已弃用的.live() API转换为.on()(请参阅jQuery 1.7 release notes

我在多个自定义jQuery插件中附加了this的实时事件,例如

this.live('click', function() {
    ...
});

jQuery .live() doc对如何迁移到.on()有一些指导,如下所示:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

然而,这不起作用:

$(document).on('click', this, function() {
    ...
});

所以...如何使this绑定的直播事件与新的on() API一起使用?

4 个答案:

答案 0 :(得分:9)

试一试:

$(document).on('click', this.selector, handler);

jQuery对象具有selector属性,表示用于创建该对象的选择器。

请注意,选择器是使用遍历方法修改的,因此我假设您的插件通常在初始DOM选择时使用。


为避免使用内部属性,您只需更改插件的API即可明确传递选择器。

答案 1 :(得分:3)

.selector属性未记录,可能会在删除.live()时删除。当你使用.live()时,这段代码是什么样的?这些插件是如何使用的?

答案 2 :(得分:3)

从jQuery 1.7开始,ondocs函数用于替换绑定事件的现有单独方法:

onedocs是一种特殊情况,您应该继续按原样使用它。

现有事件仍然存在,只是on的别名。 没有正式报告表明它们会被删除,因此如果你更了解它们,你可以继续使用它们。 livedie已被删除在a blog postlive docs中提到的jQuery 1.7中已弃用。

on事件有多种格式,但函数签名如下:

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

绑定:

$(selector).bind(events, data, handler);
$(selector).on(events, null, data, handler);

Source:

bind: function( types, data, fn ) {
  return this.on( types, null, data, fn );
}

代表:

$(selector).delegate(subselector, events, data, handler);
$(selector).on(events, subselector, data, handler);

Source:

delegate: function( selector, types, data, fn ) {
  return this.on( types, selector, data, fn );
}

住:

$(selector).live(events, data, handler);
$(document).on(events, selector, data, handler);

Source:

live: function( types, data, fn ) {
  jQuery( this.context ).on( types, this.selector, data, fn );
  return this;
}

请注意this.context是使用this.context = document;指定的$(document).on(...)设置的。{/ sub>

答案 3 :(得分:0)

$(selector).on(events, data, handler)

仍然可以。你仍然可以使用它。查看 .on docs