我最近将jQuery从1.8更新到了2.1。我突然发现这些.live()
停止工作。
我得到错误TypeError: $(...).live is not a function
。
有什么可以代替的方法.live()
吗?
我最近将jQuery从1.8更新到了2.1。我突然发现这些.live()
停止工作。
我得到错误TypeError: $(...).live is not a function
。
有什么可以代替的方法.live()
吗?
Answers:
.live()
已从1.9版开始删除。这意味着,如果您要从1.8版或更早版本进行升级,则如果不遵循以下迁移指南,将会发现事情中断。您不能简单地将其替换.live()
为.on()
!
对于快速/热补丁上线的站点,不只是替换关键字live
用on
,
因为参数是不同的!
.live(events, function)
应该映射到:
.on(eventType, selector, function)
(子)选择器非常重要!如果由于任何原因不需要使用此功能,请将其设置为null
。
之前:
$('#mainmenu a').live('click', function)
之后,将子元素(a
)移至.on()
选择器:
$('#mainmenu').on('click', 'a', function)
之前:
$('.myButton').live('click', function)
之后,将元素(.myButton
)移至.on()
选择器,然后找到最近的父元素(最好使用ID):
$('#parentElement').on('click', '.myButton', function)
如果您不知道该如何放置父项,则body
始终可以使用:
$('body').on('click', '.myButton', function)
您可以通过包含以下JavaScript代码来避免重构代码
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
jQuery API文档live()
从1.7版开始列出,从1.9版开始:link。
版本已弃用:1.7,已删除:1.9
此外,它指出:
从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。较旧版本的jQuery的用户应优先使用.delegate()而不是.live()
.live()
jQuery> = 1.9的前向端口避免在.live()
使用优化的DOM选择器上下文中 重构JS依赖项
/**
* Forward port jQuery.live()
* Wrapper for newer jQuery.on()
* Uses optimized selector context
* Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
}
});
}
.live在1.9中已删除,请参阅升级指南:http : //jquery.com/upgrade-guide/1.9/#live-removed
一个非常简单的修复程序,无需更改代码,只需添加jquery迁移脚本,即可在此处下载 https://github.com/jquery/jquery-migrate/
它提供了不建议使用的jQuery,但需要诸如“实时”,“浏览器”等功能
如果没有必要,我倾向于不使用.on()语法。例如,您可以像这样轻松迁移:
旧:
$('.myButton').live('click', function);
新:
$('.myButton').click(function)
以下是有效事件处理程序的列表:https : //api.jquery.com/category/forms/
return this;
该函数的末尾应包括a 以便保留链接能力