Каковы различия между методами JavaScript window.onload
и jQuery $(document).ready()
?
javascript
jquery
dom-events
unobtrusive-javascript
Вайбхав Джайн
источник
источник
$().ready()
делает его огонь после того, какwindow.onload
время от времени.Ответы:
ready
Событие происходит после того, как был загружен HTML документ, в то время какonload
событие происходит позже, когда все содержимое (например , изображения) , также был загружен.onload
Событие является стандартным событием в DOM, в то время какready
событие является специфическим для JQuery. Цель этогоready
события состоит в том, что оно должно произойти как можно раньше после загрузки документа, чтобы коду, который добавляет функциональность к элементам на странице, не приходилось ждать загрузки всего содержимого.источник
ready
Событие является специфичны для JQuery. Он используетDOMContentLoaded
событие, если оно доступно в браузере, иначе оно эмулирует его. В DOM нет точного эквивалента, потому чтоDOMContentLoaded
событие поддерживается не во всех браузерах.onload
.onload
это имя свойства объекта, в котором хранится функция, которая будет вызвана при запускеload
события.window.onload
является встроенным событием JavaScript, но поскольку его реализация имеет тонкие причуды в разных браузерах (Firefox, Internet Explorer 6, Internet Explorer 8 и Opera ), jQuery предоставляетdocument.ready
, который абстрагирует их и запускает, как только DOM страницы готов (не ждет изображений и т. д.).$(document).ready
(обратите внимание, что это не такdocument.ready
, что не определено) - это функция jQuery, которая упаковывает и обеспечивает согласованность для следующих событий:document.ondomcontentready
/document.ondomcontentloaded
- новое событие, которое возникает при загрузке DOM документа (это может произойти за некоторое время до загрузки изображений и т. д.); опять же, немного отличается в Internet Explorer и в остальном миреwindow.onload
(который реализован даже в старых браузерах), который запускается, когда загружается вся страница (изображения, стили и т. д.)источник
load
событиеwindow
реализовано достаточно последовательно во всех браузерах. Упомянутая вами проблема, которую пытаются решить jQuery и другие библиотеки, заключается в том, чтоload
событие не запускается до тех пор, пока не будут загружены все зависимые ресурсы, такие как изображения и таблицы стилей, что может занять длительное время после полной загрузки DOM. предоставлены и готовы к взаимодействию. Вызывается событие, которое вызывается в большинстве браузеров, когда DOM готовDOMContentLoaded
, а неDOMContentReady
.onload
(есть различия по FF / IE / Opera). Что касаетсяDOMContentLoaded
, вы совершенно правы. Редактирование, чтобы уточнить.document.onload
было пользоваться). Что касается window.onload:window.onload = fn1;window.onload=fn2;
- только fn2 будет вызываться при загрузке. Некоторые бесплатные веб-хосты вставляют свой собственный код в документы, а иногда это затормаживает код на странице.$(document).ready()
это событие jQuery$(document).ready()
Метод JQuery вызывается, как только DOM готов (это означает, что браузер проанализировал HTML и построил дерево DOM). Это позволяет вам запускать код, как только документ готов к работе.Например, если браузер поддерживает событие DOMContentLoaded (как это делают многие браузеры, отличные от IE), то это событие сработает. (Обратите внимание, что событие DOMContentLoaded было добавлено только в IE в IE9 +.)
Для этого можно использовать два синтаксиса:
Или сокращенная версия:
Основные моменты для
$(document).ready()
:$
наjQuery
когда вы получите «$ не определено».$(window).load()
вместо этого.window.onload()
родная функция JavaScript Вwindow.onload()
событии срабатывает , когда все содержимое на странице загрузится, в том числе DOM (Document Object Model), рекламных баннеров и изображений. Другое различие между ними состоит в том, что, хотя у нас может быть более одной$(document).ready()
функции, у нас может быть только однаonload
функция.источник
Нагрузки Windows , срабатывает событие , когда все содержимое на странице полностью нагруженные включая DOM (Document Object Model) содержание и асинхронные JavaScript , кадры и изображения . Вы также можете использовать body onload =. Оба одинаковы;
window.onload = function(){}
и<body onload="func();">
есть разные способы использования одного и того же события.$document.ready
Событие функции jQuery выполняется немного раньшеwindow.onload
и вызывается после загрузки DOM (объектной модели документа) на вашу страницу. Он не будет ждать, пока изображения, кадры полностью загрузятся .Взятые из следующей статьи: как
$document.ready()
отличается отwindow.onload()
источник
источник
Слово предостережения при использовании
$(document).ready()
с Internet Explorer. Если HTTP-запрос прерывается до загрузки всего документа (например, во время потоковой передачи страницы в браузер по другой ссылке) IE запустит$(document).ready
событие.Если какой-либо код в
$(document).ready()
событии ссылается на объекты DOM, существует вероятность того, что эти объекты не будут найдены, и могут возникнуть ошибки Javascript. Либо защищайте ваши ссылки на эти объекты, либо откладывайте код, который ссылается на эти объекты, на событие window.load.Я не смог воспроизвести эту проблему в других браузерах (в частности, Chrome и Firefox)
источник
Небольшой совет:
Всегда используйте,
window.addEventListener
чтобы добавить событие в окно. Потому что таким образом вы можете выполнить код в разных обработчиках событий.Правильный код:
Неверный код:
Это потому, что onload - это просто свойство объекта, которое перезаписывается.
По аналогии с
addEventListener
ним лучше использовать$(document).ready()
, чем загружать.источник
Мероприятия
$(document).on('ready', handler)
привязывается к готовому событию из jQuery. Обработчик вызывается при загрузке DOM . Активы как изображения, возможно, все еще отсутствуют . Он никогда не будет вызван, если документ готов во время привязки. Для этого jQuery использует DOMContentLoaded -Event, эмулируя его, если он недоступен.$(document).on('load', handler)
это событие, которое будет запущено после загрузки всех ресурсов с сервера. Изображения загружены сейчас. В то время как onload является необработанным событием HTML, готовое построено с помощью jQuery.функции
$(document).ready(handler)
на самом деле это обещание . Обработчик будет вызван немедленно, если документ готов во время вызова. В противном случае он привязывается кready
событию.Перед JQuery 1.8 ,
$(document).load(handler)
существует в качестве псевдонима для$(document).on('load',handler)
.Дальнейшее чтение
источник
$.fn.load
что больше не ведёт себя как связующее звено событий. На самом деле, он устарел начиная с jquery 1.8. Я обновил его соответственно$(document).ready()
Является JQuery событие , которое происходит , когда HTML документ был полностью загружен, в то время какwindow.onload
событие происходит позже, когда все , в том числе изображения на странице загружен.Кроме того, window.onload - это явное событие javascript в DOM, а
$(document).ready()
событие - метод в jQuery.$(document).ready()
обычно это оболочка для jQuery, чтобы убедиться, что все загруженные элементы используются в jQuery ...Посмотрите на исходный код jQuery, чтобы понять, как он работает:
Также я создал изображение ниже как краткий справочник для обоих:
источник
window.onload: обычное событие JavaScript.
document.ready: конкретное событие jQuery, когда весь HTML был загружен.
источник
Одна вещь, которую нужно помнить (или я должен сказать, вспомнить), это то, что вы не можете сложить,
onload
как вы можете сready
. Другими словами, jQuery magic позволяет использовать несколькоready
s на одной странице, но вы не можете сделать это с помощьюonload
.Последнее
onload
отменит любые предыдущиеonload
s.Хороший способ справиться с этим - использовать функцию, написанную, по-видимому, одним Саймоном Уиллисоном и описанную в разделе Использование нескольких функций загрузки JavaScript .
источник
Document.ready
(событие jQuery) сработает, когда все элементы на месте, и на них можно ссылаться в коде JavaScript, но содержимое не обязательно загружается.Document.ready
выполняется, когда документ HTML загружен.window.load
Однако будет ждать страницы , чтобы быть полностью загружены. Это включает в себя внутренние рамки, изображения и т. Д.источник
Событие document.ready происходит, когда документ HTML был загружен, и
window.onload
событие происходит всегда позже, когда весь контент (изображения и т. Д.) Был загружен.Вы можете использовать это
document.ready
событие, если хотите «рано» вмешаться в процесс рендеринга, не дожидаясь загрузки изображений. Если вам нужны изображения (или любой другой «контент»), прежде чем ваш скрипт «что-то сделает», вам нужно подождать, покаwindow.onload
.Например, если вы реализуете шаблон «Слайд-шоу», и вам необходимо выполнить вычисления на основе размеров изображения, вы можете подождать, пока
window.onload
. В противном случае вы можете столкнуться с некоторыми случайными проблемами в зависимости от скорости загрузки изображений. Ваш сценарий будет работать одновременно с потоком, который загружает изображения. Если ваш сценарий достаточно длинный или сервер достаточно быстрый, вы можете не заметить проблему, если изображения появляются вовремя. Но самая безопасная практика - загружать изображения.document.ready
Это может быть хорошим событием для вас, чтобы показать пользователям знак «загрузка ...», и послеwindow.onload
этого вы можете выполнить любой сценарий, для которого требовались загруженные ресурсы, и, наконец, удалить знак «Загрузка ...».Примеры :-
источник
window.onload
это встроенная функция JavaScriptwindow.onload
запуск при загрузке HTML-страницы.window.onload
может быть написано только один раз.document.ready
является функцией библиотеки jQuery.document.ready
срабатывает, когда HTML и весь код JavaScript, CSS и изображения, включенные в файл HTML, полностью загружены.document.ready
может быть написано несколько раз в соответствии с требованиями.источник
Когда вы говорите
$(document).ready(f)
, вы говорите скриптовому движку сделать следующее:$
и выберите его, поскольку он не находится в локальной области видимости, он должен выполнить поиск в хеш-таблице, которая может иметь или не иметь коллизии.ready
выбранного объекта, который включает в себя поиск другой хеш-таблицы в выбранном объекте, чтобы найти метод и вызвать его.В лучшем случае это 2 просмотра хеш-таблицы, но это игнорирует тяжелую работу, проделанную jQuery, где
$
находится кухонный приемник всех возможных входных данных для jQuery, поэтому, скорее всего, существует другая карта для отправки запроса в правильный обработчик.В качестве альтернативы, вы можете сделать это:
который будет
onload
является ли свойство свойством или нет, выполнив поиск в хеш-таблице, поскольку он вызывается как функция.В лучшем случае, это требует поиска в одной хеш-таблице, что необходимо, потому что
onload
нужно выбрать.В идеале, jQuery должен компилировать свои запросы в строки, которые можно вставить для выполнения того, что вы хотели от jQuery, но без диспетчеризации jQuery во время выполнения. Таким образом, у вас есть возможность либо
eval
.источник
window.onload предоставляется API-интерфейсом DOM и сообщает, что «событие загрузки запускается при загрузке данного ресурса».
«Событие загрузки происходит в конце процесса загрузки документа. На этом этапе все объекты в документе находятся в DOM, и все изображения, сценарии, ссылки и подкадры завершили загрузку». DOM onload
Но в jQuery $ (document) .ready () будет работать только после того, как страница Document Object Model (DOM) будет готова для выполнения кода JavaScript. Это не включает изображения, сценарии, фреймы и т. Д. Событие, готовое к jquery
Таким образом, метод jquery ready будет запущен раньше, чем событие dom onload.
источник