img.onload дает неверный аргумент в IE - PullRequest
3 голосов
/ 18 ноября 2011

Я пытаюсь определить, когда загружаются все изображения в массиве, а затем вызывать функцию. Прекрасно работает во всех браузерах, кроме 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'
});
}
}
}

1 Ответ

2 голосов
/ 18 ноября 2011

Вы можете просто использовать событие загрузки документа.

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

Событие загрузки происходит в конце процесса загрузки документа. В В этот момент все объекты в документе находятся в DOM, и все изображения и подкадры завершили загрузку.

Для отдельных загрузок изображений см. JQuery событие загрузки , которое отличается от идентично названного ajax load . Это будет выполняться при загрузке изображения.

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

Обновление

Я думаю, что это то, что после ОП. Этот бит кода получит каждый img после полной загрузки. После загрузки создается новое изображение на его основе и вставляется в новую область (например, слайд-шоу). В этом примере вы можете увидеть, что два самых больших изображения обычно заканчиваются в конце списка скопированных изображений. Я также использовал settimeout для загрузки окончательного изображения через три секунды, и это должно всегда быть в конце.

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

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