【问题标题】:Rails Jquery doesn't work on other pagesRails Jquery 在其他页面上不起作用
【发布时间】:2013-06-29 14:11:07
【问题描述】:

我相信 jQuery 不能在您刚安装的页面之外的其他页面上运行。例如,当我键入 localhost:3000/ 时,在 '/' 目录中所有 jQuery 都可以工作。但是当我点击一个由 Rails 创建的链接时

<%= link_to "Example Link", news_path %>

页面正确加载,但 jQuery 不起作用。我的 jQuery 代码如上所述:

$(function() {
  console.log( "pageloaded" );
  ....
  $('.up').click(function(){
    .....
  });
});

【问题讨论】:

  • 右键单击浏览器 > 检查元素 > 控制台 .. 在此处发布错误消息。
  • 没有任何错误信息。但是 jQuery 没有被加载。
  • 您使用的是什么版本的 Rails?在 Rails 4 中,turbolinks 默认处于活动状态,这意味着新页面是动态加载的,不会触发 $(document).ready。如果手动加载 localhost:3000/news 会发生什么
  • 在这种情况下,如何让每个页面都可以使用 jquery 函数?

标签: javascript jquery ruby-on-rails ruby-on-rails-4


【解决方案1】:

在 Rails 4 中,turbolinks 默认处于活动状态。
这意味着,当您加载新页面时,不会执行 $(document).ready()

turbolink 触发一个新事件page:load。您可以使用它来运行您的 javascript 代码:

$(document).on('page:load', your_start_function);

有一个优秀的rails cast on turbolinks

【讨论】:

  • +1 如果你想关闭涡轮链接:) - blog.steveklabnik.com/posts/…
  • 实际上,有一个名为“jquery.turbolinks”的 gem 将 page:load 事件与 jquery 就绪事件绑定在一起
【解决方案2】:

https://github.com/kossnocorp/jquery.turbolinks

此 gem 将 jQuery.ready 函数与 Turbolinks 监听事件页面绑定:加载,因此如果您将 Turbolinks 与 Rails 4 一起使用,则该解决方案应该得到解决

【讨论】:

    【解决方案3】:

    您的 Gemfile 中需要 gem 'jquery-rails'(如果您使用的是捆绑器,则需要捆绑安装)

    完成后,您需要在 application.js 文件中要求它:

    //= require jquery
    

    最后,您需要确保application.js 文件作为应用程序模板的一部分加载。在application.html.erb 中,您应该有以下内容:

    <%= javascript_include_tag "application" %>
    

    我相信这一切在 Rails 安装中默认存在,因此如果您删除了这些设置中的任何一个,则需要重新添加它们以使其正常工作。

    【讨论】:

    • jquery rails gem 安装正确,jquery 在首页运行良好。
    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多