Убедитесь, что порядок выполнения обработчика событий jQuery - PullRequest
6 голосов
/ 27 января 2012

Я думаю , что обработчики событий обрабатываются в порядке их регистрации. (Это правильно?) Если это так, то если я прикреплю обработчик событий в начале моего скрипта, могу ли я быть абсолютно уверен, что он сработает до того, как последующие обработчики будут присоединены к тому же событию? Также как-то влияют на это пространства имен событий? Обработчики событий запускаются последовательно (один завершается раньше другого) или параллельно?

Я хочу сделать это, потому что мой сценарий зависит от размера области просмотра, который изменяется в событии изменения размера, и мне нужно постоянно его искать. Вместо того, чтобы постоянно вызывать $(window).width() в каждой из моих функций-обработчиков, я бы хотел поместить обработчик в начало моего скрипта, который сохраняет $(window).width() в свойстве объекта при каждом изменении размера. Затем в последующих обработчиках я могу получить доступ к свойству и быть уверенным, что это самое последнее измерение.

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

1 Ответ

4 голосов
/ 27 января 2012

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

Вы можете проверить массив обработчиков событий через объект данных:

$(window).data('events');

Примечание: это недокументированный подход, который в конечном итоге может не сработать. Используйте его только для проверки.

...