【问题标题】:Uncaught ReferenceError: $ is not defined in Rails 5.2未捕获的 ReferenceError: $ 未在 Rails 5.2 中定义
【发布时间】:2018-10-27 19:00:21
【问题描述】:

我正在构建一个 Rails 应用程序,当用户单击索引表的行时,我希望将用户重定向到 #show 操作。

为此,我尝试在我的咖啡脚本文件中使用 Jquery。这是相关代码

index.html.erb:

<% @campaign.each do |campaign| %>
    <tr data-link="<%= campaign_path(campaign) %>">
        <td><%= campaign.campaign_name %></td>
        <td><%= campaign.start_date %></td>
        <td><%= campaign.created_at %></td>
        <td><%= link_to "delete", campaign, class:"btn btn-default btn-xs", method: :delete, data: { confirm: "You sure?" } %></td>
     </tr>
<% end %>

campaigns.coffee:

$ ->
  $("tr[data-link]").click ->
    window.location.replace($(this).data("link"));

但是一旦我运行它,我就会在浏览器控制台中看到这个错误:

Uncaught ReferenceError: $ is not defined

我已经安装了jquery-rails gem。也将它包含在我的application.js 文件中。当我的应用程序被渲染时,我也在标题中看到了 Jquery 脚本标记

<script src="/assets/jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1"></script>

但我仍然在控制台中看到此错误

Uncaught ReferenceError: $ is not defined
at campaigns.self-4617c47e06384e281aa2550caae08f3b4986441d2bfff9b6e3519f0a1e82f3d7.js?body=1:2
at campaigns.self-4617c47e06384e281aa2550caae08f3b4986441d2bfff9b6e3519f0a1e82f3d7.js?body=1:8
(anonymous) @ campaigns.self-4617c47e06384e281aa2550caae08f3b4986441d2bfff9b6e3519f0a1e82f3d7.js?body=1:2
(anonymous) @ campaigns.self-4617c47e06384e281aa2550caae08f3b4986441d2bfff9b6e3519f0a1e82f3d7.js?body=1:8

我错过了什么吗?感谢您的帮助。

【问题讨论】:

  • 你确定 jQuery 是在你的脚本之前加载的吗?如果你写jQuery而不是$呢?
  • 您可能需要先添加$(document).on "turbolinks:load", -&gt;
  • @LyoshaKorogoda 我尝试添加 jQuery 而不是 $ - 它显示相同的错误 - Uncaught ReferenceError: jQuery is not defined
  • @PatMellon 不确定我是否做对了。这是您建议的语法吗? $(document).on "turbolinks:load", -> $("tr[data-link]").click -> window.location.replace($(this).data("link"));但它仍然显示相同的错误
  • 类似$(document).on "turbolinks:load", -&gt; $("tr[data-link]").click -&gt; window.location.replace($(this).data("link")); return return return

标签: javascript jquery ruby-on-rails coffeescript ruby-on-rails-5.2


【解决方案1】:

我想我也遇到了同样的问题,我意识到我一定误解了official guide

我在 Rails 5.2(Rails 5.1 之后)中想到的,因为我们有内置的 rails-ujs,我们不再需要 jquery/jquery_ujs。

但我错了。

我通过article 了解到我的错误。在我发现“未捕获的 ReferenceError:$ 未定义”问题后,我怀疑的是“没有安装 jquery”。并且查了很多帖子后,我尝试安装jquery-rails进行测试。

终于成功了。

是的,即使在 Rails 5.2 中,我们也需要 jquery-rails。

【讨论】:

  • karl li 你是对的,如果你使用 Rails 5.1 或更高版本,则不需要jquery-ujs,因为对于这些版本,正确的库是rails-ujs,但如果你仍然需要jquery-rails想在你的应用程序中使用 jquery。 jquery-ujsjquery-rails 用于不同的目的。
【解决方案2】:

安装jquery-rails之后再按照application.js的顺序进行

//= require jquery
//= require jquery_ujs 
.....

Installation

来自评论的解决方案

我已经知道问题可能出在哪里。在我的application.js 中,每当我添加require jquery 时,它都会破坏我的整个应用程序并将所有页面重定向到localhost:3000/undefined

//= require rails-ujs 
//= require jquery 
//= require activestorage 
//= require turbolinks 
//= require_tree . 

如果我删除require jquery,那么它将再次开始正常工作。

【讨论】:

  • 我想我已经知道问题可能出在哪里了。在我的 application.js 中,每当我添加 require jQuery - 它会破坏我的整个应用程序并将所有页面重定向到 localhost:3000/undefined //= require rails-ujs //= require jquery //= require activestorage //= require turbolinks //= require_tree . 如果我删除“require jQuery”,那么它将再次开始正常工作。
  • 我不知道发生了什么,但正确的顺序是以require jquery 开头,如果您使用require jquery_ujs,则不需要使用require rails-ujs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 2016-06-24
  • 2023-01-23
  • 2014-05-21
  • 2019-11-05
相关资源
最近更新 更多