jQuery domready и window ready случайно работают?

#javascript #jquery #domready

#javascript #jquery #domready

Вопрос:

В последнее время я заметил, что иногда domready и window.загрузка не работает. Это похоже на случайную работу при входе на страницу и / или обновлении.

Допустим, у меня есть:

 $(function(){
  $('.hide').hide();
  // disable html5 native validation to let jquery handle 
  $('form').attr('novalidate','novalidate');
});

$(window).load(function(){
  $('.input').click(function(){
      $(this).animate({opacity:0.8});
  }).blur(function(){
      $(this).animate({opacity:1});
  });
});
  

Иногда, когда я загружаю страницу, элемент не становится скрытым, иногда это так, поля ввода будут анимироваться, иногда нет, и оба необязательно завершаются сбоем вместе. Если я обновлю страницу несколько раз, это сработает.

Я всегда думал, что domready будет выполняться, как только doms будут готовы, и window.загрузка будет ждать, пока все на странице не будет готово? Или это еще одни ошибки из HTML5?

Вопрос в том, я что-то упускаю или просто что-то недопонимаю?

Редактировать: особенно Chromium. Я на Ubuntu, поэтому не удивлюсь, если это ошибка chromium.

Комментарии:

1. Я знаю, что это не отвечает на ваш вопрос, но я не знаю, почему вы используете $(function(){... (domready) в одном месте и $(window).load... (загрузка окна) в другом месте. Не могли бы вы добиться того же с domready, поскольку вы не ждете загрузки изображений?

2. Что blue делает? Это пользовательская функция jQuery?

3. @marcosfromero: У меня действительно загружаются изображения на некоторых страницах, но это был простой пример, чтобы продемонстрировать мою настройку и была ли проблема с HTML5, или просто у самого chromium возникла эта проблема. Кроме того, что ты говоришь о синем цвете? Я нигде не припоминаю синего цвета в своем коде.

4. Почему это должны быть ошибки из HTML5 ? Единственными элементами, которые надежно поддерживают событие загрузки, являются body и iframe . jQuery выводит свое собственное событие DOM ready на основе того, что, по его мнению, доступно. Я бы не стал смешивать эти два. В частности, не зависите от HTML5 — это не стандарт, и поддержка неоднозначна. Придерживайтесь HTML 4.01 и DOM 0/1/2/3 для важных вещей. Используйте функции HTML5 осторожно, с тестированием функций и подходящим резервным вариантом. Не все используют последнюю версию браузера Chrome или что-то еще.

5. @RobG: Я думаю, ты прав. Я пошел и начал извлекать расширения и обнаружил, что плагин Google voice путался с domready и window.load. Если плагин авторизован, он пытается найти номера телефонов на странице, создавая помехи для domready jquery.

Ответ №1:

Имейте в виду, что если у вас очень сложная структура html, это может задержать время готовности dom. Браузер, вероятно, пытается отрисовывать страницу как можно быстрее, и с действительно сложной страницей возможно, что начнется отрисовка и сработает событие domready, но браузер быстро отрисовает материал до запуска определенного кода, который вы настроили.

Блок в jQuery domready выполняется так быстро, как только может, но если вы поместите, скажем:

setTimeout(функция(){ $().ready(функция(){оповещение(‘наконец’);});}, 9000);

Это «так быстро, как только возможно» по-прежнему будет ограничено местом появления кода, в данном случае после 9-секундного тайм-аута.