如何将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中已经弃用了live
和die
。
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
文档