jQuery 1.9 .live()不是一个函数
我最近更新jQuery从1.8到2.1。 我突然发现.live()
停止工作。
我得到错误TypeError: $(...).live is not a function
。
有没有什么方法可以用来替代.live()
?
jQuery .live()
已经从版本1.9开始删除。
这意味着如果您从版本1.8及更早的版本升级,如果您不遵循下面的迁移指南,则会注意到事情会中断。 您不能简单地用.on()
replace.live()
.on()
!
在开始search和replace之前阅读:
对于在现场的快速/修复 , 不要只是用关键字live
来replace,
因为参数是不同的 !
.live(events, function)
应该映射到:
.on(eventType, selector, function)
select器非常重要! 如果因为任何原因不需要使用它,请将其设置为null
。
迁移示例1:
之前:
$('#mainmenu a').live('click', function)
之后,将子元素( a
)移动到.on()
select器:
$('#mainmenu').on('click', 'a', function)
迁移示例2:
之前:
$('.myButton').live('click', function)
之后,将元素( .myButton
)移动到.on()
select器,然后find最近的父元素(最好使用ID):
$('#parentElement').on('click', '.myButton', function)
如果你不知道应该把什么作为父母, body
总是工作:
$('body').on('click', '.myButton', function)
也可以看看:
- jQuery – 如何使用“on()”方法而不是“live()”?
- jQuery 1.9迁移指南
您可以通过包含以下JavaScript代码来避免重构代码
jQuery.fn.extend({ live: function (event, callback) { if (this.selector) { jQuery(document).on(event, this.selector, callback); } } });
jQuery API文档列出了从版本1.7开始不推荐使用的live()
,并从版本1.9: 链接中删除。
版本已弃用:1.7,删除:1.9
此外它指出:
从jQuery 1.7开始,.live()方法已被弃用。 使用.on()附加事件处理程序。 老版本的jQuery用户应该优先使用.delegate() . live ()
jQuery> = 1.9的.live()
转发端口避免重构.live()
上的JS依赖关系使用优化的DOMselect器上下文
/** * 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
.live()已被弃用,现在已经从jQuery 1.9中删除您应该使用.on()
一个非常简单的修复,不需要改变你的代码,只需添加jQuery的迁移脚本,在这里下载https://github.com/jquery/jquery-migrate/
它提供了jQuery的不推荐,但需要的function,如“活”,“浏览器”等
如果没有必要,我倾向于不使用.on()语法。 例如,你可以像这样更容易地迁移:
旧:
$('.myButton').live('click', function);
新:
$('.myButton').click(function)
以下是有效事件处理程序的列表: https : //api.jquery.com/category/forms/
仅从上面
如果你不知道应该把什么作为父母,身体总是工作:
$('body').on('click', '.myButton', function) $('.jcrop-tracker').live('dblclick', function () { $('#btnCrop').trigger("click"); });
变
$('body').on('dblclick', '.jcrop-tracker', function () { $('#btnCrop').trigger("click"); });
如果您恰好使用Ruby on Rails的jQuery gem jquery-rails
,由于某些原因您不能重构您的遗留代码,那么仍然支持的最后一个版本是2.1.3
,您可以使用以下语法将其locking你的Gemfile
:
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
那么你可以使用下面的命令来更新:
bundle update jquery-rails
我希望能帮助别人面对类似的问题。