что именно означает document-ready в jquery


Допустим, у меня есть HTML-страница, содержащая файл javascript:

Основание.js выглядит так:

$(document).ready(function () {
   obj.init();
}

// ..............

var obj = {...};

Удивительно, иногда ... ( не все время) Firebug показывает мне неопределенную ошибку на obj.init() вызове! Насколько я понимаю, под готовым документом подразумеваются все html-элементы, включая изображения, файлы javascript, загруженные и выполненные(?).

Я считаю, что для того, чтобы найти первопричину этой ошибки, нам нужно понять, что именно " документ готов" значит? у кого-нибудь есть какое-нибудь озарение?

============================

Update: возможно, я не должен упоминать здесь об изображении, моя главная забота касается файла javascript в частности. Значит "дом полностью построен" включают "весь код JavaScript выполнился"?

============================

Обновление снова: кажется, люди здесь согласились, что событие " документ.ready " не будет запущен, пока весь код javascript не будет загружен и выполнен. Таким образом, первопричина вопрос остается неизвестным. Я действительно обошел эту проблему после того, как я переместил $(документ).готовый блок в нижней части файла javascript.

3 3

3 ответа:

Из документации jQuery.ready():

Хотя JavaScript предоставляет событие load для выполнения кода при отображении страницы, это событие не запускается до тех пор, пока все ресурсы, такие как изображения, не будут полностью получены. В большинстве случаев сценарий можно запустить, как только иерархия DOM будет полностью построена. Обработчик, переданный в .ready(), гарантированно будет выполнен после того, как DOM будет готов, поэтому обычно это лучшее место для присоединения всех других обработчиков событий и запустить другой код jQuery. При использовании сценариев, которые зависят от значения свойств стиля CSS, важно ссылаться на внешние таблицы стилей или внедрить элементы стиля перед ссылками на сценарии.

В тех случаях, когда код полагается на загруженные ресурсы (например, если требуются размеры изображения), код должен быть помещен в обработчик для события load.

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

Сюда входят все файлы Javascript, но Не изображения.

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

Если вам нужно загрузить все изображения, прежде чем вы что-то сделаете, вы должны использовать событие load вместо этого.

Вы должны определить obj, прежде чем ссылаться на него.

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