2011-06-25 65 views
2

我還是新來的jQuery,我不知道怎麼就被稱爲jQuery函數內。就緒()工作得很好,但不是外面?jQuery函數裏面只有工作。就緒()

例如,這會工作:

$(document).ready(function() { 
    $('#field1').click(function() { 
     $('#result').load('/random_post #post'); 
    }); 
}); 

但這不會:DOM樹被創建時,執行

$('#field1').click(function() { 
    $('#result').load('/random_post #post'); 
}); 
+0

http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery解釋了原因。 –

回答

2

如何,如果它的工作原理,將取決於它的腳本和元素在你的HTML被放置的順序上,它也可能是由於你的控制之外參數的影響(例如,瀏覽器是如何編程的行爲)。

我想知道這個腳本出現在你的頁面之前這個元素帶有id="field1",它獲得了一個點擊處理程序;這會導致腳本運行並在文檔樹中找不到這樣的元素(還)。元素在腳本運行後被添加,這就是爲什麼jQuery在加載完整文檔後發現它很好。

如果你在你的頁面的最末端移動這個腳本它應該工作(儘管當然正確的解決辦法是使用文檔準備事件,在您的第一個片段)。

0

就緒功能。在第二段代碼中出現錯誤,因爲尚未創建id爲filed1的dom樹元素,即頁面尚未加載。

4

您不能訪問DOM,直到文件被完全解析和DOM結構。這包括修改任何元件–如#field1#result

由於$(document).ready(..)是漫長的,可能很難記住,你也可以使用縮寫形式$(onReadyFunction),即

$(function() { 
    $('#field1').click(function() { 
     $('#result').load('/random_post #post'); 
    }); 
}); 

順便說一句,jQuery的在這裏做什麼魔法:它只是註冊稱爲你的功能當DOMContentLoaded(或等效)事件由DOM樹的解析和構建觸發時。

相關問題