在页面之间共享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为加号,就会触发
,如果jQuery可用(否则,您可以在自己的代码中调用XMLHttpRequest时手动触发它)page:update
在加载过程结束时触发page:load
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