从一个页面导航到另一个页面时,JavaScript 不会执行

2024-05-24

我正在构建我的第一个 Ruby on Rails 应用程序,并尝试创建一个动画导航栏。我正在使用 jQuery 和 Turbolink。

这是我的application.js (under /app/assets/javascripts)

$(document).ready(function(){
  $("#nav").hover(function(){
    $("#nav").animate({left:'10px'});
  },
  function(){
    $("#nav").animate({left:'-220px'});
  });
});

And on application.html.erb (under app/views/layouts), 我有

<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

和我的超级导航栏,现在看起来像这样(也在应用程序/视图/布局下)

<div id='nav'>
  <%= image_tag('arrow.png', size: '20x20', id: "arrow") %>
  <ul>
    <li><%= link_to 'Main page', root_path%></li>
    <li><%= link_to 'Résumé', resume_path %></li>
  </ul>
</div>

When I load my app, the animation works, but when I navigate to an other page of the app, the animation stops working. If I press F5, it's working again

因此,如果我想使用导航栏,我必须刷新每个页面。

你知道我能做什么来解决这个问题吗?


这可能是由 Rails Turbolinks 引起的问题。

Rails 4.0 引入了一个名为涡轮链接 https://github.com/rails/turbolinks/提高网站的感知速度。 Turbolinks 仅在点击链接时更新页面的正文和标题,从而使应用程序显示得更快。通过不重新加载整个页面,Turbolinks 减少了浏览器渲染时间和服务器访问次数。 使用 Turbolinks,用户点击链接并看到一个新页面,但您的 JavaScript 认为该页面没有更改,因为尚未加载新页面。要解决此问题,您可以通过从 Gemfile 中删除 Turbolinks gem 来禁用 Turbolinks。

您还可以修改 JavaScript。为了确保使用 Rails Turbolinks 时跟踪每个页面,请添加以下 JavaScript:

// accommodate Turbolinks
$(document).on('ready page:change', function() {
. . .
})

Turbolinks 发射了page:change页面被替换时发生的事件。该代码监听page:change事件并调用 JavaScript 方法。这段代码将起作用 即使在未通过 Turbolinks 访问的页面上(例如,访问的第一个页面)。

我写了一本书,学习 Ruby on Rails http://learn-rails.com/learn-ruby-on-rails.html,其中包括有关 JavaScript 的一章并涵盖了 Turbolinks 问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从一个页面导航到另一个页面时,JavaScript 不会执行 的相关文章

随机推荐