我最近将jQuery从1.8更新到2.1。我突然发现.live()停止工作。 我得到错误TypeError: $(…)。Live不是一个函数。

是否有任何方法可以用来代替.live()?


当前回答

.live在1.9中被移除,请查看升级指南:http://jquery.com/upgrade-guide/1.9/#live-removed

其他回答

.live在1.9中被移除,请查看升级指南:http://jquery.com/upgrade-guide/1.9/#live-removed

.live()已弃用,现已从jQuery 1.9中移除 你应该使用.on()

jQuery .live()在1.9版之后被移除

这意味着如果您从1.8版本或更早版本升级,如果您不遵循下面的迁移指南,您将会注意到一些问题。你不能简单地用.on()代替.live() !


在开始搜索和替换之前阅读:

对于实时站点上的快速/热修复,不要只是将实时功能替换为on,因为参数是不同的!

.live(events, function)

应映射到:

.on(eventType, selector, function)

(子)选择器非常重要!如果出于任何原因不需要使用它,请将其设置为null。


迁移示例1:

之前:

$('#mainmenu a').live('click', function)

之后,你将子元素(a)移动到.on()选择器:

$('#mainmenu').on('click', 'a', function)

迁移示例2:

之前:

$('.myButton').live('click', function)

之后,你将.myButton元素移动到.on()选择器,并找到最近的父元素(最好带有ID):

$('#parentElement').on('click', '.myButton', function)

如果你不知道把什么作为父元素,文档总是可以工作的:

$(document).on('click', '.myButton', function)

参见:

jQuery -如何使用“on()”方法而不是“live()”? jQuery 1.9迁移指南

当我将得到这个错误在我的网站。它将停止一些功能 在我的网站上,经过研究,我找到了这个问题的解决方案,

$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'
    })
});

应该替换'live'到'on'检查下面

    $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)

jQuery >= 1.9 .live()的前向端口 避免重构JS对.live()的依赖 使用优化的DOM选择器上下文

/** 
 * 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);
          }
      }
  });
}