我正在将代码从已弃用的.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一起使用?
答案 0 :(得分:9)
试一试:
$(document).on('click', this.selector, handler);
jQuery对象具有selector
属性,表示用于创建该对象的选择器。
请注意,选择器是使用遍历方法修改的,因此我假设您的插件通常在初始DOM选择时使用。
为避免使用内部属性,您只需更改插件的API即可明确传递选择器。
答案 1 :(得分:3)
.selector属性未记录,可能会在删除.live()时删除。当你使用.live()时,这段代码是什么样的?这些插件是如何使用的?
答案 2 :(得分:3)
从jQuery 1.7开始,on
docs函数用于替换绑定事件的现有单独方法:
one
docs是一种特殊情况,您应该继续按原样使用它。
现有事件仍然存在,只是on
的别名。 没有正式报告表明它们会被删除,因此如果你更了解它们,你可以继续使用它们。 live
和die
已被删除在a blog post和live
docs中提到的jQuery 1.7中已弃用。
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;
指定的$(document).on(...)
设置的。{/ sub>
答案 3 :(得分:0)
$(selector).on(events, data, handler)
仍然可以。你仍然可以使用它。查看 .on
docs