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 

我希望能帮助别人面对类似的问题。