在页面之间共享document.ready javascript

在页面之间共享document.ready javascript,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我有很多$(函数(){});(document.ready)javascript函数,这些函数在我的不同网页上都是相同的。然而,我不知道如何“共享”它们,这样我就可以将它们保存在一个地方,而不必每次都复制并粘贴它们 i、 在Rails中,我尝试将一些共享代码放在javascript资产管道中,但它没有运行(除非加载后刷新页面一次)。不过,当前页面特有的javascript确实在运行 有什么想法吗 更新 Saiqul的答案是有效的,但我最终做了什么,我发现最好的是这样做:试试这个问题,看看它是否有

我有很多
$(函数(){});(document.ready)
javascript函数,这些函数在我的不同网页上都是相同的。然而,我不知道如何“共享”它们,这样我就可以将它们保存在一个地方,而不必每次都复制并粘贴它们

i、 在Rails中,我尝试将一些共享代码放在javascript资产管道中,但它没有运行(除非加载后刷新页面一次)。不过,当前页面特有的javascript确实在运行

有什么想法吗

更新


Saiqul的答案是有效的,但我最终做了什么,我发现最好的是这样做:

试试这个问题,看看它是否有帮助:

此外,本博客还讨论了如何最好地添加JS:

还有一个谷歌搜索结果:
您使用的rails版本是什么? 如果rails 4+,你需要更多的文档事件监听器,比如
$(document).on('page:change',function(){})
,因为rails 4+使用gem使加载页面更快,所以jQuery.ready()监听器只在第一次加载页面时执行,而不在另一个页面中工作

TurboLink提供了一些事件:

  • 页面:更改前
  • page:fetch
    开始获取新的目标页面
  • page:receive
    该页面已从服务器获取,但尚未解析
  • page:change
    该页面已被解析并更改为新版本,并且已加载
  • 只要jQuery的ajaxSuccess上的page:change为加号,就会触发
    page:update
    ,如果jQuery可用(否则,您可以在自己的代码中调用XMLHttpRequest时手动触发它)
  • page:load
    在加载过程结束时触发
或者可以使用gem,当TurboLink触发page:load事件时,它将触发jQuery.ready()

更新

这是我的js代码

我封装了必须在单个函数中的每个页面上运行的js代码

var ready = function(){
  $('somEl').on('change', function(){ 
    .... 
  });
  $('otherEl').on('click', function(){ 
    .... 
  });
});
然后在三个事件侦听器上执行

$(document).ready(ready) // jquery event

$(document).on("page:fetch", function(){ // turbolinks event
  ready();

  // you can add more code here, which will be fired when turbolinks starting fecth new page
}
$(document).on("page:change", function(){  // turbolinks event
  ready();

  // you can add more code here too
}

像javascript这样的客户端语言不能跨页面持久化。因此,在每个单独的脚本上都必须有一个
ready
函数。将所有脚本放在一个.js中,并在所有页面上引用该文件。Viola一个源代码,包含在您想要的每一页中。@TWhite-ew-no,这就是脚本如何产生数千行的原因,只有一小部分代码与您需要的内容相关。非常可怕practice@SterlingArcher只包含重复的代码,而不是所有js。除非我不理解OP的原始问题。@t我想这就是我试图解决的问题。您将如何“引用”该.js文件?就像我提到的,我试过一种。我在document.ready函数中调用了共享javascript。但除非我刷新页面一次,否则它不会运行。请引导我完美地找到答案。我为所有共享javascript使用了页面:change listener。但是,值得注意的是,将另一个共享javascript绑定到文档,如.click和.hover,放在函数之外。找到了解决方案的最佳描述嘿,这很有效。但是为Rails 4+用户找到了更好的解决方案。请看这里:我也提到了jquery.turbolinks