你不應該有「頁面特定」的代碼,考慮到理論上你最終應該有一個大的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這是一個很好的候選人。
將該文件放在公用文件夾中,並將該腳本加載到所需頁面上。雖然這不是最好的解決方案,但可能會有所幫助 –