jQuery 1.9 .live()不是一个函数

ngp*_*und 228 javascript jquery function live deprecated

我最近将jQuery从1.8升级到2.1.我突然发现.live()停止工作.
我收到了错误TypeError: $(...).live is not a function.

有什么方法可以用来代替.live()吗?

Sam*_*iew 488

jQuery .live()已在1.9版本中删除.

这意味着如果您从1.8及更早版本进行升级,如果您不遵循下面的迁移指南,您会注意到事情已经破裂.你不能简单地取代.live().on()!


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

对于快速/热补丁上线的站点,只是替换关键字liveon,
因为参数是不同的!

.live(events, function)
Run Code Online (Sandbox Code Playgroud)

应映射到:

.on(eventType, selector, function)
Run Code Online (Sandbox Code Playgroud)

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


迁移示例1:

之前:

$('#mainmenu a').live('click', function)
Run Code Online (Sandbox Code Playgroud)

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

$('#mainmenu').on('click', 'a', function)
Run Code Online (Sandbox Code Playgroud)

迁移示例2:

之前:

$('.myButton').live('click', function)
Run Code Online (Sandbox Code Playgroud)

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

$('#parentElement').on('click', '.myButton', function)
Run Code Online (Sandbox Code Playgroud)

如果你不知道要把什么作为父母,body总是有效:

$('body').on('click', '.myButton', function)
Run Code Online (Sandbox Code Playgroud)

也可以看看:


Lir*_*niv 51

您可以通过包含以下JavaScript代码来避免重构代码

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
        return this;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 应该在函数末尾包含一个`return this;`以保留链接能力 (3认同)

Sir*_*rko 15

jQuery API文档列出live()了1.7版本已弃用,并从版本1.9开始删除:链接.

弃用版本:1.7,删除:1.9

此外,它指出:

从jQuery 1.7开始,不推荐使用.live()方法.使用.on()附加事件处理程序.旧版jQuery的用户应该使用.delegate()而不是.live()


Dav*_*mas 14

.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);
          }
      }
  });
}
Run Code Online (Sandbox Code Playgroud)


koo*_*jah 7

.live() 已弃用,现在已从 jQuery 1.9 中删除您应该使用.on()


mat*_*ino 5

.live已在1.9中删除,请参阅升级指南:http://jquery.com/upgrade-guide/1.9/#live-removed


Tof*_*eeq 5

一个非常简单的修复,不需要更改你的代码,只需添加jquery迁移脚本,在这里下载 https://github.com/jquery/jquery-migrate/

它提供了jquery弃用但需要的功能,如"live","browser"等


Ger*_*ied 5

如果没有必要,我倾向于不使用 .on() 语法。例如,您可以像这样更轻松地迁移:

老的:

$('.myButton').live('click', function);
Run Code Online (Sandbox Code Playgroud)

新的:

$('.myButton').click(function)
Run Code Online (Sandbox Code Playgroud)

以下是有效事件处理程序的列表:https : //api.jquery.com/category/forms/

  • 我认为 .on() 语法只需要动态加载的内容(例如,页面加载后添加的元素)。 (4认同)

Asl*_*han 5

当我在我的网站上收到此错误时。它将停止我网站上的某些功能,经过研究,我找到了此问题的解决方案,

$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'
    })
});
Run Code Online (Sandbox Code Playgroud)

应将“ 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'
    })
});
Run Code Online (Sandbox Code Playgroud)

下面还有一个基本的例子:

.live(event, selector, function) 
Run Code Online (Sandbox Code Playgroud)

将其更改为:

.on(event, selector, function)
Run Code Online (Sandbox Code Playgroud)