Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: window onload
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » window onload

Страниц (1): [1]
 

1. Pavelbeginner - 25 Июля, 2013 - 09:54:23 - перейти к сообщению
После события ready я начинаю делать кучу различных проверок и, если проверки прошли успешно, ставлю обработчик для события window onload. Не может ли быть такого, что пока идут мои проверки уже сработает событие onload? Почему интересуюсь. Решил проверить просто в консоли, когда страница полностью загружена, вызовется ли моя ф-ци(ниже), если событие onload уже отработало:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $(window).load
  3. (
  4.     function()
  5.     {
  6.         alert(1);
  7.     }
  8. );
  9.  

В итоге ф-ция не вызывается.

Или же пока обрабатывается событие ready, событие onload не может быть вызвано?

И ещё вопрос. Всегда ли событие ready срабатывает раньше onload?
2. teddy - 25 Июля, 2013 - 10:14:54 - перейти к сообщению
Обратите внимание, вы НЕ вызываете функцию при load, а просто ее создаете, соответственно ничего вызываться и не должно
3. Pavelbeginner - 25 Июля, 2013 - 10:21:10 - перейти к сообщению
teddy пишет:
Обратите внимание, вы НЕ вызываете функцию при load, а просто ее создаете, соответственно ничего вызываться и не должно
Ну да, я просто устанавливаю обработчик. А можно ли проверить, что событие onload уже произошло?
4. teddy - 25 Июля, 2013 - 10:28:57 - перейти к сообщению
Pavelbeginner пишет:
Ну да, я просто устанавливаю обработчик. А можно ли проверить, что событие onload уже произошло?

Конечно можно. Вот простой пример на js:

CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2.     alert("Окно не загружено");
  3.  
  4. window.onload = function()
  5. {
  6.     alert("Окно загружено");
  7. }
  8. </script>

Сначала будет выполнен тот alert, который находится за пределами window.onload
и не важно в какой части кода расположен этот алерт. Тоесть скрипт действует так: Он выполняет всё, кроме того, что находится в window.onload. После того, как весь скрипт будет выполнен, тогда он полезет в window.onload и начнет выполнять то, что описано там. Тоесть после полной загрузки всего, кроме window.onload - он выполняется в последнюю очередь.

Итог: если страница полностью и без ошибок была загружена - значит выполнился onload. Легко проверить вышеуказанным примером
5. LIME - 25 Июля, 2013 - 10:39:03 - перейти к сообщению
teddy смотрим сюда http://api[dot]jquery[dot]com/load-event/
Pavelbeginner ты устанавливаешь обработчик после наступления события
(Добавление)
Pavelbeginner пишет:
А можно ли проверить, что событие onload уже произошло?
установив обработчик в начале скрипта...в нем можно установить флаг например
6. Pavelbeginner - 25 Июля, 2013 - 10:43:09 - перейти к сообщению
LIME пишет:
teddy смотрим сюда http://api[dot]jquery[dot]com/load-event/
Pavelbeginner ты устанавливаешь обработчик после наступления события
(Добавление)
Pavelbeginner пишет:
А можно ли проверить, что событие onload уже произошло?
установив обработчик в начале скрипта...в нем можно установить флаг например

Пара вопросов:
1) Допустим, сработало событие ready. В нем я устанавливаю обработчик на событие load. И в этот момент срабатывает событие load. Будет ли обработан мой обработчик на load?
2) Не может быть такого, что событие load сработает раньше события ready?
7. LIME - 25 Июля, 2013 - 10:48:05 - перейти к сообщению
Pavelbeginner пишет:
сработало событие ready
значит документ загружен...поздняк обработчики на загрузку лепить
ready и означает что документ загружен и готов к работе с DOM
значит можно смело выполнять действие не назначая обработчик
8. DelphinPRO - 25 Июля, 2013 - 11:49:16 - перейти к сообщению
Pavelbeginner пишет:
Не может быть такого, что событие load сработает раньше события ready?

Не может.
Но, теоретически, они могут отработать последовательно, и вы не успеете назначить обработчик onLoad внутри onReady.
Лучше все же их назначать по отдельности. А в вашем случае, возможно, пересмотреть логику работы скрипта.
9. LIME - 25 Июля, 2013 - 11:57:15 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function() {
  2.    setTimeout(function(){alert('ready')},10);
  3. });
  4. $(window).load(function() {
  5.    alert('load');
  6. });
убери таймаут

 

Powered by ExBB FM 1.0 RC1