2012-10-16 31 views
6

我一直在尋找這裏和谷歌時,確切的jQuery .load()事件火(當然我的意思是加載事件的圖像)?我的意思不是典型situtation當圖像文件加載,我所知道的 - 負載事件觸發,當我們:什麼時候確切jQuery加載事件激發?

1 /追加新的IMG到文件:

$('<img src="picture.jpg" />').appendTo('body'); 

2 /更改現有的圖像的src屬性:

$('img').attr('src' , 'new_path.jpg'); 

3 /創建新對象IMG:

var object = $('<img src="picture.jpg" />'); 

但對於這些情況becasue我不知道:

4 /追加圖像對象未添加到文檔(DOM):

var o = $('<div></div>'); 
o.append('<img src="picture.jpg" />'); 

//我的意思是o在DOM樹中不存在,它不附加

5 /加載內容與IMGS反對不添加到文件:

var o = $('<div></div>'); 
o.load('url.html #pictures'); 

//我的意思是Ø在DOM樹不存在,它不附加

我將非常感謝您的幫助...

+0

不幸的是,我相信'load'行爲差別很大基於瀏覽器。 –

回答

2

對於數字4,它似乎只會觸發一次,它被追加到內存中的對象,並且在附加到DOM時不會再次觸發。看看這個小提琴:http://jsfiddle.net/JxHe4/並觀察Chrome工具或Firebug中的網絡流量和控制檯輸出。

Chrome,Firefox和IE9之間的行爲似乎一致。現在這回答你的問題的一部分(希望),但沒有解釋行爲的原因。我的猜測是這是它指定的方式(因爲所有瀏覽器的行爲都相似),但我無法找到onLoad事件正式定義的規範。

對於數字5,我不希望加載一個頁面會影響圖像的加載,我不知道如何在第一個地方獲得對這些圖像的引用來將一個.Load處理程序附加到它們上。

[UPDATE]

This excerpt from HTML4 specification可以解釋點4的行爲:一個嵌入的文檔(IMG在這種情況下)是完全獨立於其所嵌入的文檔。例如,嵌入文檔中的相對URI根據嵌入文檔的基本URI而不是主文檔的URI來解析。嵌入式文檔僅在其他文檔中呈現(例如,在子窗口中);它仍然是獨立的。

+1

爲#4更妙的是,如果您註釋掉'$(「佔位符」)追加(O);'則事件仍會觸發。 – Calavoow

+0

是啊..這就是我的意思,它時,它在內存中追加,當追加到DOM它不會再次火火一次 – kabaros

+0

#4是的,它看起來像IMG時追加到事件被觸發 - 內存對象,但它不適用於Opera(僅限FF/IE/Chrome)。 – Lluck

0

的情況下

4 - 您可以將元素追加到VAR o,現在當您與您的經銷商o追加到一些DOM,它會追加包含分區IMG。

5 - 如果是o.load,內容將不會被加載,直到您的var o被轉儲到頁面上。但在控制檯中不會出現相同的錯誤。

+0

請不要在SO上使用txtspk。並不是每個人都能流利地說英語,像'u'和'wen'這樣的abreviations令人困惑。 – Jamiec

+0

我會記住這一點。感謝編輯jamiec。 –

0

你的#4將引發在大多數情況下的負載事件(有可能是緩存圖片的一些問題),但是#5可能會或可能不會取決於你綁定的情況下,如何快速加載圖像。如果您在.load(url)之後將事件綁定在行上,則不會因爲圖像尚未存在而觸發。如果將它放在.load調用的成功中,它可能會觸發,如果它在綁定之前沒有觸發(爭用條件)。

+0

你已經寫道:「如果一個圖像直接包含在DOM中,它將只在它可見時才被加載」。我不知道,如果你是正確的,請看看這個例子:http://jsfiddle.net/neam3/ - 當你有

加載事件仍是起火...... – Lluck

+0

你是正確的,在我的測試,我是在他們完成之後不正確地等待。 –

相關問題