что именно готово для документов означает в jquery - PullRequest
3 голосов
/ 29 февраля 2012

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

Base.js выглядит так:

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

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

var obj = {...};

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 29 февраля 2012

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

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

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

2 голосов
/ 29 февраля 2012

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

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

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

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

1 голос
/ 29 февраля 2012

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

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

...