#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-секундного тайм-аута.