jQuery 1.9 .live() 不是函数

新手上路,请多包涵

我最近将 jQuery 从 1.8 更新到 2.1。我突然发现 .live() 停止工作。

我收到错误 TypeError: $(...).live is not a function

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

原文由 ngplayground 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

jQuery .live() 从 1.9 版开始被移除

这意味着,如果您从 1.8 及更早版本升级,如果您不遵循下面的迁移指南,您会发现出现问题。您不能简单地将 .live() 替换为 .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 始终有效:

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


也可以看看:

原文由 Samuel Liew 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 Liran Barniv 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题