2012-11-02 115 views
4

我在使用Rails 3.2.8時遇到了jQuery問題。我已經安裝了jQuery的軌道寶石和我的application.js有以下幾點:jQuery不能在Rails 3.2.8上工作

//= require jquery 
//= require jquery_ujs 
//= require_tree . 

的意見/佈局/ application.html.erb有

<%= javascript_include_tag "application" %> 

一個簡單的JavaScript測試中test.js :

if (jQuery) { 
alert('Jquery is loaded') 
} else { 
alert ('Jquery is not loaded') 
} 

給了我一個警告,告訴我jQuery確實已經加載。

但是,沒有jQuery的命令將工作,甚至連基本的有反應遲鈍:

$(document).ready(function(){ 
$("a").click(function(event){ 
alert("Thanks for visiting!"); 
}); 
}); 

我用盡了一切 - 甚至可以通過谷歌API重新加入jQuery的。關於可能發生什麼的任何想法?

+1

控制檯中的任何js錯誤? – apneadiving

+0

錯誤顯示在控制檯中? –

+0

nope,控制檯中沒有js錯誤 – Michelle

回答

2

定了!

在application.html.erb,我改變了這兩條線路的順序從:

<%= stylesheet_link_tag "application", :media => "all" %> 
<%= javascript_include_tag "application" %> 

到:

<%= javascript_include_tag "application" %> 
<%= stylesheet_link_tag "application", :media => "all" %> 

現在,它的作品!我不確定爲什麼,有人可以解釋嗎?

+5

我遇到同樣的問題。我試圖交換這些,但是,這並沒有奏效。 –

1

您可能想檢查您正在測試的瀏覽器中的控制檯。

在jQuery的情況下,$只是一個別名jQuery的,做了以下工作

jQuery(document).ready(function(){ 
    jQuery("a").click(function(event){ 
    alert("Thanks for visiting!"); 
    }); 
}); 

也許你叫jQuery.noConflict()的地方,然後刪除別名?

http://api.jquery.com/jQuery.noConflict/

1

確保你包括的JavaScript在您application.html.erbyield標記之前。如果您使用的是Bootstrap,我認爲默認的application.rb在yield之後加載JS,這使得必須等到jQuery加載完成才能在視圖中運行它。

如果是這樣的話,你不希望重新定位包括標籤在頁面上的,你可以這樣做:

runScript(); 
function runScript() { 
    if(window.$) { // Make sure jquery is loaded 
     // your jquery code here 
    } else { 
     window.setTimeout(runScript, 100); // If not, wait 100 milliseconds and try again. 
    } 
} 
0

雖然答案爲時已晚,但我仍然會提供,因爲我遇到了同樣的問題,浪費了2小時。刪除js文件中的註釋,因爲它們是註釋而不是js註釋。如果你刪除它們並編寫你的js代碼,它會正常工作。