Javascript Rails-jQuery有时未加载

Javascript Rails-jQuery有时未加载,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我有一个Rails应用程序,其中application.js中指定了以下内容: //= require jquery //= require jquery_ujs //= require turbolinks //= require gmaps/gmaps //= require underscore //= require_tree . jQuery由Rails系统加载 问题是,有时候jQuery看起来没有加载,因为——例如——谷歌地图——不工作(以及其他与jQuery相关的东西)。刷新/重

我有一个Rails应用程序,其中
application.js
中指定了以下内容:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require gmaps/gmaps
//= require underscore
//= require_tree .
jQuery由Rails系统加载

问题是,有时候jQuery看起来没有加载,因为——例如——谷歌地图——不工作(以及其他与jQuery相关的东西)。刷新/重新加载后一切正常,但这种行为非常令人不快

由于我从未遇到过这个问题,我不确定会出什么问题-我将尝试从Google加载jQuery(通过页面标题中的HTML链接),如果有帮助,我将查看它

然而,你们中没有人面对过这个问题,并且有解决它的技巧吗


谢谢你

涡轮链接

我能给出的最好提示是,这是一个
turbolinks
问题:

刷新/重新加载后一切正常,但这种行为非常复杂 不愉快

您所描述的是Turbolinks问题的一个典型特征——基本上,当您使用Turbolinks时,它只会通过Ajax重新加载页面的
标记。这使得
标记保持不变,这使Javascript认为您的页面元素没有更改(从而阻止它们绑定)

--

修复

解决这一问题的方法有:

因为javascript只能将事件绑定到DOM中的元素,所以它将无法处理加载DOM后出现的任何元素。为了解决这个问题,您可以从一直存在的容器(通常是
文档
)中委托事件绑定:

$(document).on("click", "#your_element", function() {
   // do stuff here
});
--

另一种解决方法是将事件封装在函数中,可以使用
Turbolinks events
调用函数:

var tester = function(){
    //do stuff here
};

$(document).on("page:load ready", tester);
--

:


里奇,谢谢你的留言。我更深入地检查了它,当我在应用程序中并单击徽标(意味着它将我重定向到应用程序的根目录)时,jQuery事件就不起作用了。但是,当我刷新时,它工作正常,因此它的行为与OP中的稍有不同。但是,我尝试安装jquery turbolinks gem,但它无助于解决问题。您是否有任何控制台错误或其他问题?我很确定这是Turbolinks发布的一个可能的副本,但你仍然可以从中得到帮助[
#Gemfile
gem 'jquery-turbolinks'

#app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require turbolinks
//= require gmaps/gmaps
//= require underscore
//= require_tree .