繁体   English   中英

在页面之间导航时 JavaScript 不执行

[英]JavaScript doesn't execute when navigating from page to page

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

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

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

application.html.erb (在app/views/layouts ),我有

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

和我的超级导航栏,现在看起来像这样(也在 app/views/layouts 下)

<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>

当我加载我的应用程序时,动画工作,但当我导航到应用程序的其他页面时,动画停止工作。 如果我按F5 ,它会再次工作

所以如果我想使用我的导航栏,我必须刷新每个页面。

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

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

Rails 4.0 引入了一个名为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 访问的页面(例如,访问的第一个页面)上,此代码也能工作。

我写了一本书, Learn Ruby on Rails ,其中有一章是关于 JavaScript 的,并涵盖了 Turbolinks 问题。

对我来说,当我将所有$(document).ready(function(){更改为:

$(document).on("ready page:load", function(){

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM