为啥 jQuery 在我的 rails 5 应用程序中不起作用?

Posted

技术标签:

【中文标题】为啥 jQuery 在我的 rails 5 应用程序中不起作用?【英文标题】:Why is jQuery not working in my rails 5 app?为什么 jQuery 在我的 rails 5 应用程序中不起作用? 【发布时间】:2017-11-24 22:54:59 【问题描述】:

我正在尝试在我的新 Rails5 应用程序中编写我的第一个 js 代码,但似乎无法让 Jquery 工作,猜测这是配置/环境问题,但尽管我进行了所有搜索和确认更改,但我似乎无法让它运行。谁能看出我做错了什么?:

宝石文件;

 # Use jquery as the javascript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'

application.html.erb;

<title>MyEngine</title>
<!-- Gon::Base.render_data -->
<%= Gon::Base.render_data %>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

new.html.erb;

<%= link_to 'Remove Employee', '#', id: 'hide-employee' %>

quotes.coffee;

$(document).on "page:change", ->
    $('#hide-employee').click ->
        alert "Clicked!"

点击时没有警报。没有错误,服务器运行和页面渲染正常,只是控制台什么都没有。

感谢您的帮助。

【问题讨论】:

如果有人遇到此问题并且您已经完成了添加 turbolinks:load 的建议更改,但问题仍然存在,请检查您是否有类似的 .coffee 文件。使用 .coffee 文件或删除它并使用 .js 文件 【参考方案1】:

尝试使用 turbolinks:load 代替。

$(document).on 'turbolinks:load', ->
  $('#hide-employee').click ->
    alert 'Clicked!'

【讨论】:

感谢@hashrocket,在更改后直接工作。【参考方案2】:

对于那些因为拥有 Rails 5.1 而来到这里的人,jQuery 不再是默认依赖项。来自release notes:

在早期版本的 Rails 中默认需要 jQuery 来提供数据远程、数据确认和 Rails 的 Unobtrusive JavaScript 产品的其他部分等功能。不再需要它,因为 UJS 已被重写为使用普通的原生 JavaScript。此代码现在作为 rails-ujs 包含在 Action View 中。

如果需要,您仍然可以使用 jQuery,但默认情况下不再需要它。

要将其重新添加,请添加到Gemfile

gem 'jquery-rails'             # Use jquery as the JavaScript library

然后

$ bundle

【讨论】:

【参考方案3】:

page:change 事件在turbolinks-classic 中定义。此版本现已弃用,您可以自己查看。

相反,您可以使用turbolinks:load or turbolinks:render or turbolinks:before-render。

【讨论】:

感谢您的信息??赞赏。【参考方案4】:

确保您是 app/assets/javascripts/application.js 包含:

//= require jquery
//= require jquery-ujs

注意:如果您使用的是 Rails 5.1,则可以省略 //= require jquery_ujs 以支持 //= require rails-ujs

另外,请考虑彻底删除 turbolink。这样做解决的资产管道问题比我想象的要多。我有一种感觉,无论如何它并没有为您提供太多价值。 :-)

删除涡轮链接:

    Gemfile$ bundle 中删除 turbolinks。 从 app/assets/javascripts/application.js 中删除 //= require turbolinksapp/views/layouts/application.html.erb 中删除两个 "data-turbolinks-track" =&gt; true 哈希。

【讨论】:

感谢工具包。现在我已经按照您的建议并按照指示从应用程序中删除了 turbolinks,但是 jQuery 不会再次工作?有什么想法吗?$(#hide-employee).click(function() alert("link was clicked."); ); 什么都不做。

以上是关于为啥 jQuery 在我的 rails 5 应用程序中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 匹配高度在 Rails 5.2 上不起作用

如何在 rails 4.2.1 中使用 jquery-addresspicker

jquery ui datepicker在我的rails应用程序中不起作用

在我的 Rails 应用程序中,使用 Jquery Datepicker 在一个页面上工作,而不是在另一个页面上工作

Raty jQuery插件不工作Rails 5

Rails + jQuery ajaxPrefilter