2012-06-06 128 views
3

這是一個奇怪的情況。儘管確保它的所有依賴都在它之前被加載(在我的情況下它只是jQuery庫),但是我的腳本在加載頭部分時不起作用(即<head>),但在加載到頁腳時會執行其作業高於</body>標籤)。腳本不工作,除非在頁腳中執行

既然這還不夠清楚,讓我舉一個實例。 This is the web page。現在,查看頁面的來源,並在那裏,這是我正在談論的代碼。

<script type='text/javascript'> 
/* <![CDATA[ */ 
var yjlSettings = {"gifUrl":"http:\/\/whatthenerd.com\/wp-content\/themes\/reddlec\/images\/ajax-loader.gif","autoGrow":"enable"}; 
/* ]]> */ 
</script> 
<script type='text/javascript' src='http://whatthenerd.com/wp-content/themes/reddlec/js/no-reload-comments.js?ver=3.3.2'></script> 

它應該做的是允許用戶發表評論,而無需重新加載頁面。 (請隨時在頁面:)上測試評論) - 但事實並非如此。爲什麼?

PS:就像我之前說過的,當前面提到的腳本在</body>標記之前加載時,一切都正常。我真的不明白什麼可能導致衝突。

+1

腳本可能需要一個尚未加載的元素。 (即''內的任何內容)。 - 太晚了! – Rudie

+1

@Rudie'太遲了!'是的,但沒有問題。我今天學到了一些非常重要的東西! :D –

回答

5

你的劇本要馬上出去找的DOM元素:在腳本中找到

var $commentlist = jQuery('.commentlist'); 
var $respond = jQuery('#respond'); 

兩個例子。這些項目在加載標題時不存在,但在到達您的正文末尾時它們確實存在。如果你想從你的頭加載這個,你需要在文檔準備好塊包裝的:

jQuery(document).ready(function($) { 
    // Code using $ as usual goes here. 
}); 

這使得它的安全在你的頁面的頂部加載通過延遲代碼的執行,直到文件已經完全加載,並且構建了DOM。

更多ready在線:http://api.jquery.com/ready/

+0

你覺得這樣會更好嗎? ''jQuery(document).ready(function($){/ * My Code Here * /});' –

+1

對那個製作腳本的人大吼大叫:-P –

+1

@AahanKrish當然,特別是如果你使用.noConflict 。 – Sampson