JQuery只会在Rails 4应用程序的页面刷新中加载
我创建了一个Rails 4应用程序,并为图像弹出效果添加了fancybox库。 它工作正常,但只有当页面正在刷新。 如果页面没有被用户刷新,那么jquery根本不起作用。 我试着用小jquery方法来测试它,但所有的工作只能在页面刷新后进行。 我也使用twitter bootstrap。
我的资产/ application.js文件:
//= require jquery
//= require jquery_ujs
//= require fancybox
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .
$(document).ready(function() {
$(".fancybox").fancybox();
$("#hand").click(function(){
if($("#check6").is(':visible'))
{
$("#check6").hide();
}
else
{
$("#check6").show();
}
});
});
好吧,我想我明白你的问题足以提供一个答案。 关于使用turbolinks的事情是,大多数绑定到文档就绪事件的插件和库停止工作,因为turbolinks阻止浏览器重新加载页面。 有技巧来解决这些问题,但解决它的最简单方法是使用jquery.turbolinks。
要使用它,只需将它添加到你的Gemfile
:
gem 'jquery-turbolinks'
并将其添加到您的assets/javascripts/application.js
文件中:
//= require jquery.turbolinks
你应该很好走。
仅供参考 :您并不需要使用turbolink,但它非常有用,它可以通过避免整页刷新来提高请求速度。 Turbolinks通过AJAX获取您点击的链接内容并将其呈现在同一页面上,从而消除重新加载资源(JS和CSS)的开销。 尝试使您的网页与它一起工作。 使用前一段中的库,我没有真正的问题。 您网页上的CSS和JS越多,使用turbolinks所获得的改进就越大。
伊恩有一个很好的答案,这是一个附加的东西(在编写本文时,我不会让任何人评论)。
从https://github.com/rails/turbolinks/#jqueryturbolinks:
Add the gem [gem 'jquery-turbolinks'] to your project, then add the following line to your JavaScript manifest file, after jquery.js but before turbolinks.js:
//= require jquery.turbolinks
在我没有添加require jquery.turbolinks
在列表中的正确位置之前,所以它有点挑剔。 然后我添加了这个新的方法,我希望它能更好地工作。
除非我遵循CodeWalrus和Ian的答案,否则我无法开展工作,但对我而言,还有更多。 如jquery.turbolinks自述文件中所述,该顺序必须非常具体。
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//
// ... your other scripts here ...
//
//= require turbolinks
此外,如上所述,如果您已将应用程序JavaScript链接放在页脚中以达到速度优化的原因,那么您需要将它移动到<head>
标记中,以便它在<body>
的内容之前加载,标签。
上一篇: JQuery gets loaded only on page refresh in Rails 4 application