2011-11-18 115 views
3

我試圖檢測一個數組中的所有圖像何時加載,然後調用一個函數。在所有瀏覽器中工作正常,但IE。img.onload在IE中提供無效參數

//Detect when all images load 
for (var i = 0, cnt = 0; i < urls.length; i++){ 
    var img = new Image(); 
    if(nodeNames[i] == 'IMG'){ 
    //the following line is the problem, according to IE 
    img.onload = myFunction; 
    img.src = urls[i]; 
    } 
    else if(nodeNames[i] === 'DIV'){ 
    setTimeout(myFunction(),1); 
    }else{ 
    setTimeout(myFunction(),1); 
    } 
} 
function myFunction(){ 
    //...lots of code 
} 
else{ 
loaded = 0; 
for(var i = 0, len = slides.length; i < len; ++i){ 
slides[i].css({ 
'display':'none' 
}); 
} 
} 
} 
+0

'的setTimeout(myFunction的,1);'也許?雖然這不會成爲它只能在IE上工作的原因。 – pimvdb

+0

哇,真的有用。謝謝! –

+0

考慮使用jQuery的Deferred對象。 –

回答

2

您可以使用文檔onload事件。

https://developer.mozilla.org/en/DOM/window.onload

在文檔加載過程結束時的負載事件觸發。在 這一點上,文檔中的所有對象都在DOM中,並且所有圖像和子幀都已完成加載。

對於單個圖片加載請參閱jQuery的load event,它與相同名稱的ajax load不同。這將在圖像加載時執行。

$('img').load(function() { 
    //do something 
}); 

更新

我覺得這是O​​P是什麼之後。這一小段代碼在完全加載後會得到每個img。一旦它加載一個新的圖像是基於它創建並插入到一個新的區域(比如幻燈片)。在這個例子中,您可以看到兩個最大的圖像通常會在複製圖像列表的末尾結束。我也使用settimeout在三秒鐘後加載最終圖像,這應該總是在最後。

http://jsfiddle.net/HN9KU/4/

$('img').load(function() { 
    var img = new Image(); 
    img.src = $(this).attr('src');  
    $('#showonload').append(img); 
}); 
+0

好吧,如果你想通過一個「圖像」瀏覽器對象加載圖像時的回調,那麼jQuery不會對你有什麼好處。 – Pointy

+0

@Pointy jQuery也可以處理。 '$(new Image()).load(fn).attr('src','foo.jpg');' –

+0

@Pointy - 嗯,我想我錯過了OP的問題點。你能解釋他在做什麼嗎? – mrtsherman