你在使用 Rails 4 吗? (通过做发现rails -v
在你的控制台中)
这个问题可能是由于新添加的涡轮链接 https://github.com/rails/turbolinks/宝石。它使您的应用程序表现得像单页 JavaScript 应用程序。它有一些好处(更快了 http://blog.steveklabnik.com/posts/2012-09-27-seriously--numbers--use-them-),但不幸的是它破坏了一些现有的事件,例如$(document).ready()
因为页面永远不会重新加载。这可以解释为什么当你直接加载 URL 时 JavaScript 可以工作,但当你通过一个 URL 导航到它时却不能工作。link_to
.
这是一个RailsCast http://railscasts.com/episodes/390-turbolinks关于 Turbolinks。
有几个解决方案。您可以使用jquery.turbolinks https://github.com/kossnocorp/jquery.turbolinks作为直接修复,或者您可以切换$(document).ready()
声明改为使用 Turbolinks'page:change'
event:
$(document).on('page:change', function() {
// your stuff here
});
或者,您可以执行类似的操作以与常规页面加载以及 Turbolinks 兼容:
var ready = function() {
// do stuff here.
};
$(document).ready(ready);
$(document).on('page:change', ready);
如果您使用的是 Ruby on Rails >5(您可以通过运行来检查rails -v
在控制台中)使用'turbolinks:load'
代替'page:change'
$(document).on('turbolinks:load', ready);