【问题标题】:.live is not a function error in rails 3.2.11 [duplicate].live 不是 rails 3.2.11 中的函数错误 [重复]
【发布时间】:2013-02-10 11:30:02
【问题描述】:

我关注search-sort-using-ajax

这里我的 gemfile 包括

  • 导轨 3.2.11
  • sqlite-3
  • 将分页,'3.0'
  • jquery-rails,'2.2.1'

Application.js 文件包括

//= 需要 jquery

//= 需要 jquery_ujs

application.js 中的脚本

$(function () {
    $('#products th a').live('click', function () {
    $.getScript(this.href);
    return false;
});
})

进入控制台出错

$("#products th a").live is not a function

我搜索了但我没有找到任何解决方案。任何人都可以帮助我在这里犯了什么实际错误

谢谢

【问题讨论】:

  • 你使用的是哪个版本的jquery
  • 由于 live() 在 jQuery 1.9 中已被弃用和删除,您可能应该使用 on()
  • @jonathan:我正在使用 jquery-rails,'2.2.1'。我是否需要再次显式添加 jquery 文件。
  • @rds: 是的,因为它也可能依赖于 application.html 或 jquer-rails gem 也如此
  • 通过在您的 javascript 中添加 alert($().jquery) 来检查您的版本

标签: javascript jquery ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

我的猜测是您使用的是 jQuery 1.9,它删除了 live(在它已被多个版本弃用之后)。这样做可以得到和live一样的效果:

$(function () {
    $(document).on('click', '#products th a', function () {
        $.getScript(this.href);
        return false;
    });
});

...它将click 处理程序附加到document,但仅在单击开始或冒泡通过与选择器#products th a 匹配的元素时触发它(这是live 所做的)。

live 已被弃用并删除出于某种原因(实际上是其中几个),其中一个原因是几乎永远不会最好将click 处理程序一直向下放置document(尽管在极少数情况下)。例如,除非您删除并重新创建 products 元素,否则您可能想要:

$(function () {
    $('#products').on('click', 'th a', function () {
        $.getScript(this.href);
        return false;
    });
});

这告诉 jQuery 将click 处理程序放在#products 上,但只有当点击事件开始于或通过与th a 选择器匹配的元素时才会触发它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2016-05-24
    • 1970-01-01
    • 2020-08-22
    • 2017-10-18
    • 2019-01-06
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多