天天看點

JavaScript之window.onload = somefunction 筆記

       轉載自http://blog.sina.com.cn/s/blog_70c2f3780100y2pt.html

        今天在學習jQuery(《jQuery基礎教程(第2版)》——Jonathan Chaffer & Karl Swedberg)的時候,本着結構與腳本分離(筆者我根據CSS裡結構與形式的分離掰出來的)這一思想,做了如下筆記。

1.寫法

假設我們已經定義了如下函數:

function doStuff() {

......

}

那麼,我們既可以在HTML标記中指定該函數:

<body οnlοad="doStuff();">(方式一)

也可以在JavaScript代碼中指定該函數:

window.onload = doStuff;(方式二)

注意,上面的doStuff函數後面沒有括号“()”,隻使用了函數名。

(在測試時,如果在方式二中的doStuff後面加上了(),頁面加載後并沒有調用函數。)

這兩種方式都會導緻在頁面加載完成後執行這個函數。但第2種方式的優點在于,它能使行為更清晰地從标記中分離出來。

2.思考

在隻有一個函數的情況下,這樣做沒有什麼問題。但是,假設我們又定義了第二個函數:

function doAnotherStuff() {

......

}

我們也可以将它指定為基于頁面的加載來運作:

window.onload = doAnotherStuff();

然而,這次指定的函數,會取代剛才指定的第一個函數。因為.onload屬性一次隻能儲存對一個函數的引用,是以不能在現有的行為基礎上再增加新行為。

在這種情況下,通過$(document).ready()機制能夠得到很好的處理。每次調用這個方法——$(document).ready()都會向内部的行為隊列中添加一個新函數,當頁面加載完成後,所有函數都将得到執行。而且,這些函數會按照注冊它們的順序依次執行。(雖然通過window.onload也可注冊多個函數,但卻不能保證按順序執行)

公平地講,jQuery并不是解決這個問題的唯一方法。我們可以編寫一個 JavaScript 函數,用它構造一個調用現有的onload事件處理程式的新函數,然後再調用一個傳入的事件處理程式。

繼續閱讀