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

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

我在多个自定义jQuery插件中附加了活动事件,例如

 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() { ... }); 

所以…如何使用新的on() API将实时事件绑定this工作?

给这个镜头:

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

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

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


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

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

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

  • bind 文档
  • delegate 文档
  • live 文档

one 文档是一个特例,你应该继续按原样使用它。

现有事件继续存在,并且只是on别名。 没有官方报告表明它们会被删除,所以如果你更了解它们,你可以安全地继续使用它们。 如博客文章和live文档中所述,jQuery 1.7中已经弃用了livedie

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

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

绑定:

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

资源:

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

代表:

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

资源:

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

生活:

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

资源:

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

请注意, this.context是使用this.context = document;设置的this.context = document; $(document).on(...)

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

仍然很好。 你仍然可以使用它。 查看.on文档