你不应该有“页面特定”的代码,考虑到理论上你最终应该有一个大的JS文件。
你的代码不是“页面特定的”,我的意思是,如果你的页面没有#my_div,代码就不会运行,但没关系。
后澄清一下,你的代码应该是在一个JavaScript文件中的应用程序/资产/ javascript和你应该需要它// =需要jquery_ujs或那里的东西后yourfile(不记得现在)。
你应该把你的代码“的document.ready”事件,这是jQuery中以这种方式处理内部:
$(function() {
$("#my_div").on("click", function() {
alert($(this).text());
});
});
有关的document.ready其他细节可以在JQuery documentation
此找到确保您的代码只在所有页面加载后执行(包括javascript,css等),因此执行代码时不会有任何问题。
一个例子的application.js文件可能是这样的:
//= require jquery_ujs
//= require yourfile
//= require_tree .
为什么Rails的把代码在HTML结束的原因是,所以你的HTML(和CSS)可加载的JavaScript前观看代码(这是一项沉重的操作),因此用户可以通过这种方式开始交互/阅读您的网站。同样以这种方式,你可以确保一切正确加载,最后一个元素应该被解析。
如果我没有错,我记得有关“javascript的同步加载”,我不记得是网络请求还是实际加载的JavaScript文件,但我记得脚本标记是阻止之一,浏览器将不会继续解析HTML(或渲染CSS),而它正在加载您的JavaScript文件,这就是为什么它在HTML的末尾作为最后一个元素。
编辑1: 通过重新阅读您的问题,恐怕您实际上是直接在html中插入一些JavaScript代码。如果是这样的话,至少在rails包含jquery之后插入它。
在任何情况下,练习是错误的,除非你正在建立一个大型的Web应用程序与大量的JavaScript(你可能会使用像requirejs的东西),没有理由不会有一个单一的JavaScript文件(多个请求比单个请求慢,你应该总是将css合并为一个,对于javascript也是如此)。正如我所说的,没问题,您的代码可以包含在的所有页面中,只要确保#my_div仅存在于实际需要该代码运行的位置。
这可能是更好的约束你的代码一类以这种方式(这可能是做正确的方式):
$(".js-spam-text").on("click", function() {
alert($(this).text());
});
很抱歉的名称,替换JS-垃圾邮件的文本与任何你要。例如js-alert-message这是一个很好的候选人。
将该文件放在公用文件夹中,并将该脚本加载到所需页面上。虽然这不是最好的解决方案,但可能会有所帮助 –