Событие Image.onload не срабатывает

Я пытаюсь загрузить временный тег изображения. Как только этот тег загрузит изображение, я установлю «src» для img#main на «src» «временного» элемента изображения. Дело в том, что временное изображение успешно загружается (оно отображается на экране), но обработчик загрузки не срабатывает. Я никогда не получаю сообщение «Изображение завершено загрузкой». Я не понимаю, как временное изображение может отображаться на странице, но не запускать его обработчик загрузки (произойдет ли это, если браузер использует кешированную версию изображения? Но я почти уверен, что очистил кеш, тем не мение.). Кстати, я также пробовал код, подобный B) ниже. Но и это, похоже, не сработало. Кроме того, я использую Aptana Studio и загружаю свои страницы на свой локальный сервер WAMP. Я не знаю, имеет ли это значение. Кроме того, URL-адреса, которые я назначаю «src», относятся к документу (например: «images/image_1.jpg»).

Буду признателен за любой совет, который может быть у кого-то. Спасибо большое. Майк Х.

A)

$('img#temp').load = function(){
  mch.say('Image is done loading');
}
$('img#temp').attr('src', url);
$('img#main').attr('src', url);

B)

var tempImage = new Image();
tempImage.src = url;
tempImage.onload = function(e){
mch.say("Image is done loading");
}

person user3538389    schedule 30.05.2014    source источник
comment
Можете ли вы разместить большую часть вашего кода? Я не знаю, что такое mch. И я хотел бы увидеть часть HTML тоже.   -  person Zaenille    schedule 30.05.2014
comment
Извините за мой запоздалый ответ. Я был далеко от своего компьютера. mch.say() — это просто метод, созданный для вывода данных в окно моего браузера. Что касается моего фрагмента кода, я постараюсь в ближайшее время сделать что-то более связное.   -  person user3538389    schedule 31.05.2014


Ответы (1)


В А и Б две ошибки.

A) $('img#temp').load должно быть $('#temp').on('load') (если вы используете jquery)

Б) Вы должны назначить событие onload до присвоения src.

person RienNeVaPlu͢s    schedule 30.05.2014
comment
Я считаю, что jquery использует .load(), если я не ошибаюсь. Ваше право насчет исходного заказа. Я просто неправильно написал в вопросе. - person user3538389; 30.05.2014
comment
@user3538389 .load() используется jquery для загрузки данных с сервера, но вы хотите поймать событие onload, что можно сделать с помощью on('load') (отредактировал ответ). А вот и скрипка. - person RienNeVaPlu͢s; 30.05.2014
comment
О верно. Я думал, что load() — это ярлык fn для .on(load, handler). Глупая ошибка. - person user3538389; 31.05.2014
comment
Пункт B здесь помог мне решить аналогичную проблему, с которой я столкнулся, когда изображения кэшировались, и в результате иногда изображение уже было полностью загружено еще до того, как событие onload было настроено, что вызывало обработку, которую я хотел выполнить в обратный вызов события onload для каждого изображения не должен выполняться для некоторых изображений. Спасибо. - person HartleySan; 17.06.2015