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'
});
}
}
}
您可以使用文档onload事件。
https://developer.mozilla.org/en/DOM/window.onload
在文档加载过程结束时的负载事件触发。在 这一点上,文档中的所有对象都在DOM中,并且所有图像和子帧都已完成加载。
对于单个图片加载请参阅jQuery的load event,它与相同名称的ajax load不同。这将在图像加载时执行。
$('img').load(function() {
//do something
});
更新
我觉得这是OP是什么之后。这一小段代码在完全加载后会得到每个img。一旦它加载一个新的图像是基于它创建并插入到一个新的区域(比如幻灯片)。在这个例子中,您可以看到两个最大的图像通常会在复制图像列表的末尾结束。我也使用settimeout在三秒钟后加载最终图像,这应该总是在最后。
$('img').load(function() {
var img = new Image();
img.src = $(this).attr('src');
$('#showonload').append(img);
});
好吧,如果你想通过一个“图像”浏览器对象加载图像时的回调,那么jQuery不会对你有什么好处。 – Pointy
@Pointy jQuery也可以处理。 '$(new Image()).load(fn).attr('src','foo.jpg');' –
@Pointy - 嗯,我想我错过了OP的问题点。你能解释他在做什么吗? – mrtsherman
'的setTimeout(myFunction的,1);'也许?虽然这不会成为它只能在IE上工作的原因。 – pimvdb
哇,真的有用。谢谢! –
考虑使用jQuery的Deferred对象。 –