В чем разница между:
$(document).ready(initialize);
и
$(document).on('ready',initialize);
Мне кажется, они работают одинаково.
В чем разница между:
$(document).ready(initialize);
и
$(document).on('ready',initialize);
Мне кажется, они работают одинаково.
$(document).on('ready',initialize);
не будет работать, если DOM уже готов, когда файл выполнен.
$(document).ready()
имеет специальную обработку для этого: он гарантирует, что он всегда называется
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");
}