2009-06-25 94 views

回答

8

您的jQuery選擇器將隨機地錯過任何元素,因爲它尚未加載(通過瀏覽器)。

-1

當腳本從瀏覽器到瀏覽器,頁面到頁面運行時,這將是不可預知的。

+0

因此,如果我不關心它何時運行,它就是完全合法?我希望它會比包裝在$(document).ready()中的版本更早運行。 – Larsenal 2009-06-25 17:56:56

+4

如果它不涉及DOM,那麼我確定可以在ready()之前運行。 – 2009-06-25 17:58:04

3

$(document).ready()是jQuery確保您希望在頁面加載上運行的代碼在瀏覽器中同時運行的方式。

它還提供了一種機制來堆疊不同的函數以在頁面加載上運行。如果您不使用它並且您有多個onLoad分配,則只會添加最後一個實際運行的分配。

+4

$(document).ready()實際上在onLoad事件觸發前運行,通常 - 它在DOM加載後立即運行,而onLoad也等待所有圖像等在它下載之前下載。 – 2009-06-25 19:13:29

1

當您在DOM中選擇元素時,它們有時會工作,並且它們有時不起作用。

這隻取決於他們是否已加載。

但是,如果您在文檔的最末尾處插入腳本,它通常會沒問題。 (從那時起,它應該已經加載了所有的東西)。

2

這是學習jQuery的第一件事:如果您希望事件在您的頁面上工作,您應該在$(document).ready()函數內調用它。一旦DOM被加載並且在加載頁面內容之前,它內部的所有東西都會加載。

$(document).ready(function() { 
    // put all your jQuery goodness in here. 
}); 

$(document).ready()函數比其他獲取事件的方法有很多優點。首先,您不必在HTML中添加任何「行爲」標記。你可以將你所有的JavaScript/jQuery分離到一個單獨的文件中,它更易於維護,並且可以避開內容。當我將鼠標懸停在鏈接上時,我從未喜歡在狀態欄中看到所有這些「javascript:void()」消息。當您將事件直接附加到標籤內時會發生這種情況。

在使用傳統JavaScript的某些頁面上,您會在標籤中看到「onload」屬性。問題在於它僅限於一個功能。哦,是的,它再次爲內容添加了「行爲」標記。 Jeremy Keith的出色書籍DOM Scripting向我展示瞭如何爲單獨的JavaScript文件創建addLoadEvent函數,以允許在其中加載多個函數。但它需要一些相當簡單的代碼。另外,它在窗口加載時觸發這些事件,這導致了$(document).ready()的另一個優點。使用$(document).ready(),你可以讓你的事件加載或啓動,或者在窗口加載前讓你想要它們做的任何事情。只要DOM被瀏覽器註冊,就可以儘早將其粘貼在括號內的所有內容都準備就緒,可以在用戶第一次看到頁面元素時立即隱藏並顯示效果和其他內容。

http://docs.jquery.com/Tutorials:Introducing_ $(文件)。就緒()引用

1

Bassicly使用這個基本規則:

如果你的代碼涉及到DOM包裝你的代碼在$(文件)。就緒()。如果它不涉及DOM,那麼不要將它包裝在$(document)中。ready()

0

如果未包裝它,它只是普通的舊JavaScript,做你想做的事情,但會加載jQuery庫,很難說。

1

有使用

$(document).ready (function()) // or $(function()) 

1主要有兩個原因)它確保內的代碼只運行一次的DOM完全加載(這不包括加載圖像,Flash或其他資源,只是從HTML構建的DOM)。這意味着您可以將JavaScript放在HTML中的任何位置,而不是放在底部(使用香草JavaScript是唯一可以保證它可以在整個DOM上工作而不是在當前加載的位置)。除非你使用window.onload事件,這也保證了這一點,但只能使用一次。這使我想到了第二點;

2)它允許您在頁面加載時觸發多個函數,而不是使用使用香草javascript時使用的window.onload。這很好,因爲它意味着你不必(a)編寫你自己的函數來照顧它,b)擔心檢查是否已經有來自另一個庫的onload函數,c)花費幾年的時間去調試只是發現你的window.onload被別人的代碼覆蓋了。

加分:3)它看起來很酷,不是嗎? :P

其他說明:如果您沒有使用或操作DOM,那麼您的代碼不需要進入$(document).ready()函數內部。

把你的javascript文件放在html的底部,就在< /正文>之前,它會增加加載的速度 - 實際上速度並不快,但瀏覽器會在HTML之後加載JS,因此可以啓動在JS加載時呈現HTML。這又意味着用戶的屏幕上會出現比<頭>中的腳本早一秒的事件 - 並且在網絡中,分割秒數:)

相關問題