В чем разница между $(document).ready(initialize) и $(document).on('ready', initialize) - программирование
Подтвердить что ты не робот

В чем разница между $(document).ready(initialize) и $(document).on('ready', initialize)

В чем разница между:

  $(document).ready(initialize); 

и

  $(document).on('ready',initialize); 

Мне кажется, они работают одинаково.

4b9b3361

Ответ 1

$(document).on('ready',initialize); не будет работать, если DOM уже готов, когда файл выполнен.

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

Ответ 2

TL;DR:

  • $(document).on('ready', ...) устарел, поскольку он не выполняет обратные вызовы, связанные после полного анализа DOM. Возвращает объект события в качестве первого аргумента.

  • $().ready() получает в качестве первого аргумента ссылку на jQuery.


$(document).on('ready',initialize);

Является привязкой обработчика событий ready к document, как и следовало ожидать от любого другого обработчика события. Использование этого для прослушивания готовой DOM не рекомендуется с jQuery 1.8:

Существует также $(document).bind("ready", handler), устаревший от jQuery 1.8. Это ведет себя аналогично методу ready, но если готовое событие уже запущено и вы пытаетесь выполнить .bind("ready"), обработчик привязки не будет выполнен. Готовые обработчики, связанные таким образом, выполняются после любой привязки тремя другими методами выше.

Обратите внимание, что ready - это настраиваемое событие, а запускается jQuery внутренне. Это также означает, что вы можете запускать его вручную, что может повредить вещи.


$(document).ready(initialize);

Не привязывает обработчик событий. jQuery.fn.ready - это выделенный метод для регистрации обратных вызовов, которые должны выполняться при полном анализе DOM. jQuery добавляет обратный вызов к объекту обещания, и не имеет значения, какой селектор вы передаете $.

Кроме того, обратный вызов получает ссылку на объект jQuery вместо объекта события.


Эта часть источника прекрасно показывает, что обратные вызовы, зарегистрированные как это, обрабатываются по-разному:

// If there are functions bound, to execute
readyList.resolveWith(document, [jQuery]);

// Trigger any bound ready events
if (jQuery.fn.trigger) {
    jQuery(document).trigger("ready").off("ready");
}