window.onload vs $ (document) .ready () - PullRequest
       50

window.onload vs $ (document) .ready ()

1179 голосов
/ 13 сентября 2010

В чем разница между JavaScript window.onload и jQuery $(document).ready() метод?

Ответы [ 15 ]

1180 голосов
/ 13 сентября 2010

Событие ready наступает после загрузки документа HTML, а событие onload происходит позже, когда также загружен весь контент (например, изображения).

Событие onloadстандартное событие в DOM, а событие ready относится только к jQuery.Цель события ready состоит в том, что оно должно произойти как можно раньше после загрузки документа, чтобы коду, который добавляет функциональность к элементам на странице, не приходилось ждать загрузки всего содержимого.

130 голосов
/ 13 сентября 2010

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 (что реализовано даже в старых браузерах), которое срабатывает при загрузке всей страницы (изображения, стили и т. Д.)
85 голосов
/ 20 августа 2013

$(document).ready() - это событие jQuery.Метод JQuery $(document).ready() вызывается, как только DOM готов (это означает, что браузер проанализировал HTML и построил дерево DOM).Это позволяет запускать код, как только документ готов к работе.

Например, если браузер поддерживает событие DOMContentLoaded (как это делают многие браузеры, отличные от IE), то это событие сработает.(Обратите внимание, что событие DOMContentLoaded было добавлено в IE только в IE9 +.)

Для этого можно использовать два синтаксиса:

$( document ).ready(function() {
   console.log( "ready!" );
});

Или сокращенную версию:

$(function() {
   console.log( "ready!" );
});

Основные моменты для $(document).ready():

  • Не будет ждать загрузки изображений.
  • Используется для выполнения JavaScript, когда DOM полностью загружен.Поместите здесь обработчики событий.
  • Может использоваться несколько раз.
  • Замените $ на jQuery, когда вы получите "$ не определено".
  • Не используется, еслиВы хотите манипулировать изображениями.Используйте $(window).load() вместо этого.

window.onload() - встроенная функция JavaScript.Событие window.onload() происходит, когда загружен весь контент на вашей странице, включая DOM (объектная модель документа), рекламные баннеры и изображения.Другое различие между ними состоит в том, что, хотя у нас может быть более одной функции $(document).ready(), у нас может быть только одна функция onload.

41 голосов
/ 17 сентября 2013

A Windows load Событие возникает, когда весь контент на вашей странице полностью загружен, включая содержимое DOM (объектная модель документа) и асинхронный JavaScript , фреймы и изображения . Вы также можете использовать body onload =. Оба одинаковы; window.onload = function(){} и <body onload="func();"> - это разные способы использования одного и того же события.

jQuery $document.ready Событие функции выполняется немного раньше, чем window.onload и вызывается после загрузки DOM (объектная модель документа) на вашу страницу. Он не будет ждать полной загрузки изображений, фреймов .

Взято из следующей статьи: чем $document.ready() отличается от window.onload()

22 голосов
/ 27 августа 2012

Предупреждение об использовании $(document).ready() с Internet Explorer. Если HTTP-запрос прерывается за до , то весь документ загружается (например, во время потоковой передачи страницы в браузер при нажатии другой ссылки) IE вызовет событие $(document).ready.

Если какой-либо код в событии $(document).ready() ссылается на объекты DOM, существует вероятность того, что эти объекты не будут найдены, и могут возникнуть ошибки Javascript. Либо защищайте ваши ссылки на эти объекты, либо откладывайте код, который ссылается на эти объекты, на событие window.load.

Мне не удалось воспроизвести эту проблему в других браузерах (в частности, в Chrome и Firefox)

20 голосов
/ 26 февраля 2014

$(document).ready(function() {

    // Executes when the HTML document is loaded and the DOM is ready
    alert("Document is ready");
});

// .load() method deprecated from jQuery 1.8 onward
$(window).on("load", function() {

     // Executes when complete page is fully loaded, including
     // all frames, objects and images
     alert("Window is loaded");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
16 голосов
/ 29 ноября 2013

События

$(document).on('ready', handler) привязывается к событию готовности из jQuery.Обработчик называется , когда DOM загружен .Активы типа изображений, возможно, все еще отсутствуют .Он никогда не будет вызван, если документ готов во время привязки.Для этого jQuery использует DOMContentLoaded -Event, эмулируя его, если он недоступен.

$(document).on('load', handler) - это событие, которое сработает, когда все ресурсы загружен с сервера.Изображения загружены сейчас.Хотя onload является необработанным событием HTML, ready создается с помощью jQuery.

Функции

$(document).ready(handler) фактически являются обещанием . Обработчик будет вызван немедленно, если документ готов во время вызова. В противном случае он связывается с ready -Event.

До jQuery 1.8 , $(document).load(handler) существует как псевдоним $(document).on('load',handler).

Дальнейшее чтение

13 голосов
/ 02 сентября 2018

Небольшой совет:

Всегда используйте window.addEventListener для добавления события в окно. Потому что таким образом вы можете выполнить код в разных обработчиках событий.

Правильный код:

window.addEventListener('load', function () {
  alert('Hello!')
})

window.addEventListener('load', function () {
  alert('Bye!')
})

Неверный код:

window.onload = function () {
  alert('Hello!') // it will not work!!!
}

window.onload = function () {
  alert('Bye!') 
}

Это потому, что onload - это просто свойство объекта, которое перезаписывается.

По аналогии с addEventListener лучше использовать $(document).ready(), а не onload.

12 голосов
/ 13 октября 2017

$(document).ready() - это событие jQuery , которое происходит, когда документ HTML полностью загружен, а событие window.onload происходит позже, когда загружается все, включая изображения на странице.

Кроме того, window.onload - это чистое событие javascript в DOM, а событие $(document).ready() - это метод в jQuery.

$(document).ready() обычно является оболочкой для jQuery, чтобы убедиться, что все элементы загружены вдля использования в jQuery ...

Посмотрите на исходный код jQuery, чтобы понять, как он работает:

jQuery.ready.promise = function( obj ) {
    if ( !readyList ) {

        readyList = jQuery.Deferred();

        // Catch cases where $(document).ready() is called after the browser event has already occurred.
        // we once tried to use readyState "interactive" here, but it caused issues like the one
        // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
        if ( document.readyState === "complete" ) {
            // Handle it asynchronously to allow scripts the opportunity to delay ready
            setTimeout( jQuery.ready );

        // Standards-based browsers support DOMContentLoaded
        } else if ( document.addEventListener ) {
            // Use the handy event callback
            document.addEventListener( "DOMContentLoaded", completed, false );

            // A fallback to window.onload, that will always work
            window.addEventListener( "load", completed, false );

        // If IE event model is used
        } else {
            // Ensure firing before onload, maybe late but safe also for iframes
            document.attachEvent( "onreadystatechange", completed );

            // A fallback to window.onload, that will always work
            window.attachEvent( "onload", completed );

            // If IE and not a frame
            // continually check to see if the document is ready
            var top = false;

            try {
                top = window.frameElement == null && document.documentElement;
            } catch(e) {}

            if ( top && top.doScroll ) {
                (function doScrollCheck() {
                    if ( !jQuery.isReady ) {

                        try {
                            // Use the trick by Diego Perini
                            // http://javascript.nwbox.com/IEContentLoaded/
                            top.doScroll("left");
                        } catch(e) {
                            return setTimeout( doScrollCheck, 50 );
                        }

                        // detach all dom ready events
                        detach();

                        // and execute any waiting functions
                        jQuery.ready();
                    }
                })();
            }
        }
    }
    return readyList.promise( obj );
};
jQuery.fn.ready = function( fn ) {
    // Add the callback
    jQuery.ready.promise().done( fn );

    return this;
};

Также я создал изображение ниже в качестве кратких ссылок для обоих:

enter image description here

12 голосов
/ 02 июня 2013

window.onload: Обычное событие JavaScript.

document.ready: Определенное событие jQuery, когда весь HTML был загружен.

...