img.onload在IE中提供无效参数

问题描述:

我试图检测一个数组中的所有图像何时加载,然后调用一个函数。在所有浏览器中工作正常,但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对象。 –

您可以使用文档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