Как я могу заставить обработчик событий "готов" jQuery запускаться после всех остальных? - PullRequest
4 голосов
/ 10 января 2011

Я работаю над сценарием Greasemonkey, который фактически обновит версию jQuery, используемую на странице. Для этого мне нужно добавить «готовый» обработчик событий, который будет запускаться после всех остальных, которые могут быть на странице.

Я знаю, что jQuery ожидает манипулирования DOM, прежде чем вызывать готовые обработчики событий, так есть ли способ повлиять на порядок их выполнения? Спасибо,

Ответы [ 3 ]

3 голосов
/ 10 января 2011

Готовые обработчики добавляются в массив readyList, который, я уверен, является частным, поэтому я не думаю, что вы сможете напрямую на него повлиять.

Одна вещь, которую вы, возможно, могли бы сделать, это добавить свой код в readyList, но поместить его в setTimeout(), чтобы он немного ждал выполнения. Надеюсь, все остальные будут сделаны первыми.

Тем не менее, у вас могут возникнуть проблемы при обновлении jQuery, как это. Например, могут быть различия в реализации jQuery.cache, в которой хранятся обработчики событий и другие данные.

Так что, если jQuery.cache был заполнен одной версией, он может быть несовместим с другой.

3 голосов
/ 10 января 2011

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

1 голос
/ 10 января 2011

Как управлять порядком вызова функций в jQuery $ (document) .ready

Согласно ответам на приведенный выше вопрос, они должны запускаться в порядке добавления(ajax-вызовы в этом конкретном вопросе добавляют больше грязи в воду, чем в вашем вопросе).

...