2010-07-06 48 views
1

當我使用將數據「追加」到使用prototype/jquery的現有元素的方法時,將這種邏輯封裝在document.observe("dom:loaded", foo)/$(document).ready(foo)函數中是否是一種很好的做法?何時使用dom:loaded/document.ready事件

+3

它不僅是很好的做法,這是絕對必要的! – 2010-07-06 09:58:48

+0

這個頁面上的所有罐頭示例(http://api.jquery.com/append/)似乎都不包含'$(document).ready()'中的附加代碼......所以我仍然想知道它的絕對有必要。 – 2010-07-06 10:28:09

+0

這些應該是非常簡潔的例子。真實世界的代碼總是在一個外部文件中,並且類似這樣的操作在dom ready回調中。對於快速hackup示例,您可以使用鏈接的表單。 – 2010-07-06 15:44:53

回答

1

那麼,考慮到在DOM/window準備好之前引用元素將不起作用,除非它是html元素,或者直接在標記中注入元素,是的,這是真正完成它的唯一方法。

<!doctype html> 
<html> 
    <head> 
     <script>alert(document.getElementById('foo'));</script> 
    </head> 
    <body> 
     <p id="foo"></p> 
    </body> 
</html> 

以上將失敗並返回null。

+0

這是可以理解的,但是如果我在關閉p標記之後立即移動腳本,它仍然可以工作嗎? – 2010-07-06 10:25:41

+0

是的,這就是我所說的「你直接在標記之後注入元素」 – 2010-07-06 15:43:40

2

沒有就緒/加載的事件,只有在頁面底部纔會觸發代碼。這是因爲當代碼從<head>部分讀取(在主體之前執行)時,元素不存在。

試試這個:

$("body").animate({'background-color', '#ff0000'}, 2000); 

然後試試這個:

$(document).ready(function() { 
    $("body").animate({'background-color', '#ff0000'}, 2000); 
}); 

你會明白我的意思:)