.live()
TypeError: $(...).live is not a function
是否有任何方法可以用来代替.live()?
jQuery API文档列出了live()在1.7版被弃用,并在1.9版被移除。
live()
已弃用版本:1.7,已移除:1.9
此外,它还指出:
从jQuery 1.7开始,.live()方法已弃用。使用内()来附加事件处理程序。老版本jQuery的用户应该优先使用.delegate ()而不是.live()
.live()已弃用,现已从jQuery 1.9中移除 你应该使用内()
.live在1.9中被移除,请参见升级指南:http://jquery.com/upgrade-guide/1.9/#live-removed
这意味着如果您从1.8版本或更早版本升级,如果您不遵循下面的迁移指南,您将会注意到一些问题。你不能简单地用.on()替换.live() !
.on()
对于活动站点上的快速/热修复程序, 不只需将函数live替换为on, 作为参数不同!
live
on
.live(events, function)
应映射到:
.on(eventType, selector, function)
(子)选择器非常重要!如果出于任何原因不需要使用它,请将其设置为null。
null
之前:
$('#mainmenu a').live('click', function)
之后,将子元素(a)移动到.on()选择器:
a
$('#mainmenu').on('click', 'a', function)
$('.myButton').live('click', function)
之后,将元素.myButton移动到.on()选择器,并找到最近的父元素(最好带有ID):
.myButton
$('#parentElement').on('click', '.myButton', function)
如果你不知道放置什么作为父元素,document总是有效的:
document
$(document).on('click', '.myButton', function)
参见:
它提供了jquery弃用但需要的功能,如“live”,“浏览器”等
您可以通过包含以下JavaScript代码来避免重构代码
jQuery.fn.extend({ live: function (event, callback) { if (this.selector) { jQuery(document).on(event, this.selector, callback); } return this; } });
/** * 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); } } }); }
如果没有必要,我倾向于不使用.on()语法。例如,你可以像这样更容易地迁移:
旧:
$('.myButton').live('click', function);
新:
$('.myButton').click(function)
下面是有效事件处理程序的列表:https://api.jquery.com/category/forms/
如果你碰巧正在使用Ruby on Rails的jQuery宝石jquery-rails,由于某种原因你不能重构你的遗留代码,最后一个仍然支持的版本是2.1.3,你可以在你的Gemfile上使用以下语法锁定它:
jquery-rails
2.1.3
Gemfile
gem 'jquery-rails', '~> 2.1', '= 2.1.3'
然后可以使用以下命令进行更新:
bundle update jquery-rails
我希望能帮助其他面临类似问题的人。
当我在我的网站上得到这个错误。它将停止一些功能 在我的网站上,经过研究,我找到了这个问题的解决方案,
$colorpicker_inputs.live('focus', function(e) { jQuery(this).next('.farb-popup').show(); jQuery(this).parents('li').css( { position : 'relative', zIndex : '9999' }) jQuery('#tabber').css( { overflow : 'visible' }); }); $colorpicker_inputs.live('blur', function(e) { jQuery(this).next('.farb-popup').hide(); jQuery(this).parents('li').css( { zIndex : '0' }) });
应该替换'生活'到'在'检查下面
$colorpicker_inputs.on('focus', function(e) { jQuery(this).next('.farb-popup').show(); jQuery(this).parents('li').css( { position : 'relative', zIndex : '9999' }) jQuery('#tabber').css( { overflow : 'visible' }); }); $colorpicker_inputs.on('blur', function(e) { jQuery(this).next('.farb-popup').hide(); jQuery(this).parents('li').css( { zIndex : '0' }) });
下面是一个更基本的例子:
.live(event, selector, function)
改为:
.on(event, selector, function)