Делал прелоадилку картинок и столкнулся с проблемой — в Опере у картинки иногда не срабатывал обработчик события onload
.
Оказалось, проблема была в том, что я сначала задавал src
и потом навешивал обработчик onload
, а нужно делать наоборот. Причина проста: если картинка находится в кэше, то в Опере после задания src
она загружается мгновенно, и событие onload
срабатывает еще до того, как мы навесили обработчик onload
.
Я наблюдал этот эффект только в Опере, хотя не исключаю, что может проявиться и в других браузерах.
Правильный код:
var image = document.createElement('img');
image.onload = function () {
// вызывается всегда
alert('image loaded');
};
image.src = 'test.jpg';
В общем, логика такая: сначала нужно задать обработчик события, и только потом делать действия, которые могут привести к возникновению этого события.