Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Событие load (https://javascript.ru/forum/jquery/5491-sobytie-load.html)

Leksiy 18.10.2009 20:31

Событие load
 
Здравствуйте!
У меня есть своя страничка, гдя я использую jQuery. В моем скрипте я проверяю загружена ли картинка с помощью события load. После загрузки картинки я скрываю рисунок с прелоадером. До недавнего времени все работало.
$('#my_img').load(function(){my comand});
Но я обновил OPERA до OPERA 10 и теперь скрипт работает только при первом выполнении. В дальнейшем событие load на картинку в OPERA 10 не срабатывает, будет срабатывать только если полностью перезагрузить OPERA и опять сработает только первый раз. Как я понимаю OPERA берет картинку из кэша.
Как выполнить проверку загрузки картинки? Может есть другой способ? Или как бороться с этим в OPERA?

Большое спасибо за внимание!!!!!

Jaska 18.10.2009 21:34

юзай $.live либо плагин livequery, он в отличие от стандартного работает в IE

Leksiy 18.10.2009 22:44

Цитата:

Сообщение от Jaska (Сообщение 32701)
юзай $.live либо плагин livequery, он в отличие от стандартного работает в IE

Пробовал, не работает. Событие load не срабатывает.

x-yuri 18.10.2009 23:04

оно не срабатывает потому, что картинка уже загружена. Что находится в обработчике?

Leksiy 18.10.2009 23:41

Цитата:

Сообщение от x-yuri (Сообщение 32711)
оно не срабатывает потому, что картинка уже загружена. Что находится в обработчике?

Извините, может я не понятно объяснил. Ситуация такая - мой скрипт работал во всех браузерах, а это IE6, IE7, Firefox, Opera9, Google Chrome, Safari. Но в Opera 10 он не работает. Поэкспериментировав я понял, что не срабатывает событие load. Я написал следующее:
$('#my_img').load(function (){alert('Yes')});
И эта команда срабатывает везде в чтом числе в ОПЕРА10, но в ОПЕРА 10 только один раз, даже если открыть новую вкладку и зайти на страницу. Если закрыть ОПЕРу и включить заново, опять скрипт сработает 1 раз. Как я понял ОПЕРА берет картинку из кэша и событие load не срабатывает. Хотя, по идее, все браузеры так делают, но при этом load у них срабатывает каждый раз.

Kolyaj 19.10.2009 13:39

src картинки после навешивания события выставляете?

Leksiy 19.10.2009 13:49

Цитата:

Сообщение от Kolyaj (Сообщение 32770)
src картинки после навешивания события выставляете?

Извините, я не понял Вашего вопроса.
код HTML
<img id="my_img" src="my_page/my_img.jpg">
Код javascript я показал. Никакого изменения src нет, но load должен сработать после события загрузки картинкки. Эфект как я уже говорил.

Kolyaj 19.10.2009 14:23

Цитата:

Сообщение от Leksiy
но load должен сработать после события загрузки картинкки

Вот только вы событие навешиваете уже после загрузки. Попробуйте
<img id="my_img" src="my_page/my_img.jpg" onload="alert('yes');">

Leksiy 19.10.2009 14:32

<img id="my_img" src="my_page/my_img.jpg" onload="alert('yes');">
[/quote]

Согласен с Вами на все 100%. Так работает во всех браузерах, но хотелось бы вызывать функцию используя событие load из библиотеки jquery. Не понятно почему не всегда отлавливаются эти события. Использовать команду bind для связи своей функции с событием не помогает.

Kolyaj 19.10.2009 14:42

Цитата:

Сообщение от Leksiy
Не понятно почему не всегда отлавливаются эти события.

Я повторю, мне не трудно
Цитата:

Сообщение от Kolyaj
Вот только вы событие навешиваете уже после загрузки.


Kolyaj 19.10.2009 14:44

Цитата:

Сообщение от Leksiy
но хотелось бы вызывать функцию используя событие load из библиотеки jquery.

Свойство complete вам в помощь.

Leksiy 19.10.2009 15:02

Большое спасибо. Вашим способом работает как часы. Хотя я выполнял все инструкции по документации jquery всетаки мне кажется что событие load еще сырое, сейчас я заметил, что и в IE не всегда срабатывает, а в firefox срабатывает всегда. И еще вопрос... Как проверить загрузку div со всеми вложенными в нее картинками?

Kolyaj 19.10.2009 15:17

Цитата:

Сообщение от Leksiy
событие load еще сырое

Нормально с ним все, просто картинки иногда могут грузиться мгновенно.
Цитата:

Сообщение от Leksiy
Как проверить загрузку div со всеми вложенными в нее картинками?

div или есть, или его нет. У него нет состояния загрузки.

Leksiy 19.10.2009 15:33

complete на сколько я знаю - это событие получения AJAX ответа

Kolyaj 19.10.2009 15:40

Это не событие, а свойство объекта img.

x-yuri 19.10.2009 20:11

Цитата:

Сообщение от Leksiy
событие load еще сырое

пользователи jQuery хотят, чтобы событие load возникало один раз после загрузки изображения, и не важно, что изображение давным-давно загружено, а вот только сейчас мы назначили обработчик :D

Leksiy 19.10.2009 22:47

Вот, что у меня получилось. Событие onload объекта img выполняется когда картинка начнет загружаться. Свойство complete объекта img принимает значение true когда картинка загружена, но в некоторых браузерах принимает значение true всегда даже когда картинка не загружена. В документации jQuery сказано, что событие load на картинку выполнится после загрузки картинки, но это срабатывает не всегда. И вот, что я сделал…
На картинке в событии load написал следующее:
<img id=’my_img’ src=’my_img.jpg’ onload=”$(‘#my_img’).bin(‘load’, my_function)”>
А в файле js описал мою функцию:
function my_function()
{
alert(‘Yes’);
}
И таким образом получилось, что моя команда alert всегда срабатывает после загрузки картинки, также при перезагрузке страницы. Это я проверил в IE6, IE7, Opera10, Firefox, Google Chrome, Safari, Только не проверил в Opera9. Ну и бог с ним.

Спасибо всем, кто помог мне в этой проблеме.

x-yuri 20.10.2009 01:37

Цитата:

Сообщение от Leksiy
Свойство complete объекта img принимает значение true когда картинка загружена, но в некоторых браузерах принимает значение true всегда даже когда картинка не загружена.

можно поименно?

Цитата:

Сообщение от Leksiy
В документации jQuery сказано, что событие load на картинку выполнится после загрузки картинки, но это срабатывает не всегда.

в теме уже 5 раз прозвучало, что если load не срабатывает, значит обработчик был назначен после того, как картинка загрузилась. Допустим есть такой код
setTimout(function() {
  $('img').load(function() { alert(1); })
}, 60*60*1000);

должен ли сработать обработчик через час, если картинка загрузилась за пару секунд?

Kolyaj 20.10.2009 08:43

Цитата:

Сообщение от Leksiy
<img id=’my_img’ src=’my_img.jpg’ onload=”$(‘#my_img’).bin(‘load’, my_function)”>

В событии load у элемента навешивать у него обработчик события load. Такого трэша я еще не видел.


Часовой пояс GMT +3, время: 12:21.