Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2013, 21:10
SP7 SP7 вне форума
Интересующийся
Отправить личное сообщение для SP7 Посмотреть профиль Найти все сообщения от SP7
 
Регистрация: 24.06.2013
Сообщений: 10

Событие onload
Добрый вечер! Интересует вопрос по работе события onload.

Предположим мы имеем некий элемент на странице при клике по которому, у картинки на странице изменяем атрибут src. В обработчике click так же через метод load() отлавливаем событие загрузки данной картинки, что бы при ее загрузке обрадовать пользователя.

// Обработчик клика по некому  эл-ту страницы.
function click() {

     // Задаем нашей картинке новый путь.
     $("#myImg").attr("src", "Какой-то супер сервер/images/1.jpg");
     $("#myImg").load(alert("Супер все загрузилось!"));
}


Ситуация проста, но смущает в ней следующее, почему при первом вызове обработчика click событие load для картинки все равно происходит, ведь мы подписались на него уже ПОСЛЕ смены атрибута src. Т.е. по идее сначала должна произойти смена картинки, а уже ПОСЛЕ подписка на событие load? А получается что браузер не успев загрузить картинку уже выполнил следующую строчку кода и подписал нас на событие load. Проясните, пожалуйста, данную ситуацию.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2013, 21:24
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

браузеру какая разница что в блоке? блок есть? есть. загружен? загружен. алертуем? алертуем. а картинку он может искать годами
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2013, 21:37
SP7 SP7 вне форума
Интересующийся
Отправить личное сообщение для SP7 Посмотреть профиль Найти все сообщения от SP7
 
Регистрация: 24.06.2013
Сообщений: 10

Сообщение от jsru_ Посмотреть сообщение
браузеру какая разница что в блоке? блок есть? есть. загружен? загружен. алертуем? алертуем. а картинку он может искать годами

В смысле какая разница? Вы не поняли, мы назначаем Src, т.е. как я полагаю, сначала браузер должен загрузить картинку по указанному пути, а уже потом произойти подписка на load. Т.е. на момент подписки по идее, элемент img уже должен быть полностью загружен. А раз он уже полностью загружен, а только потом произошла подписка, то событие load при первом вызове обработчика click не должно произойти.
Ответить с цитированием
  #4 (permalink)  
Старый 10.11.2013, 01:14
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

дело в том, что ты вешаешь событие после определения пути картинки и браузер кеширует эту картинку и считает загруженной. ты вешай ДО определения пути и будет счастье как тут

а если хочешь вешать после, то делай доп проверку, как тут:
$("#myImg").one('load', function() {
  alert('Image Loaded'); 
}).each(function() {
  if(this.complete) $(this).load();
});

Последний раз редактировалось jsru_, 10.11.2013 в 01:17.
Ответить с цитированием
  #5 (permalink)  
Старый 10.11.2013, 21:50
SP7 SP7 вне форума
Интересующийся
Отправить личное сообщение для SP7 Посмотреть профиль Найти все сообщения от SP7
 
Регистрация: 24.06.2013
Сообщений: 10

Сообщение от jsru_ Посмотреть сообщение
дело в том, что ты вешаешь событие после определения пути картинки и браузер кеширует эту картинку и считает загруженной. ты вешай ДО определения пути и будет счастье

В том то и дело. Что независимо от того, ДО или ПОСЛЕ произведена подписка, событие load происходит все равно!

Т.е. событие load произойдет как в этом случае! (Хотя по идее, при первом клике, как я считаю оно не должно произойти)

// Обработчик клика по некому  эл-ту страницы.
function click() {

     // Задаем нашей картинке новый путь.
     $("#myImg").attr("src", "Какой-то супер сервер/images/1.jpg");
     $("#myImg").load(alert("Супер все загрузилось!"));
}


так и в этом

// Обработчик клика по некому  эл-ту страницы.
function click() {

     $("#myImg").load(alert("Супер все загрузилось!"));
     // Задаем нашей картинке новый путь.
     $("#myImg").attr("src", "Какой-то супер сервер/images/1.jpg");
     
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие onLoad chelsea Javascript под браузер 12 15.07.2015 05:22
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 10:46
событие onload срабатывает раньше valent1224 Events/DOM/Window 16 28.02.2011 22:55
Как заставить работать событие onLoad для embed slim-v Events/DOM/Window 0 16.09.2010 14:07
Событие OnLoad у iframe в IE milk3dfx Events/DOM/Window 2 16.02.2009 21:09