Прототип опирается на механизм запуска браузера, который используется для порядка (не все библиотеки, см. Ниже). Порядок, в котором запускаются обработчики событий, изначально не гарантировался материалом событий DOM. Из спецификации DOM2 Events :
Хотя все EventListeners
на EventTarget
гарантированно инициируются любым событием, полученным этим EventTarget
, не уточняется порядок, в котором они получат событие относительно другого EventListeners
на EventTarget
.
Подавляющее большинство реализаций браузера (Chrome, Firefox, Opera и т. Д.), Включая IE9, запускают обработчики в том порядке, в котором они были подключены. IE8 и более ранние версии делают это наоборот.
Более новая спецификация события DOM3 , все еще находящаяся в стадии разработки, вводит требование, чтобы они запускались в порядке регистрации (что делает большинство браузеров):
Затем реализация должна определить прослушиватели событий-кандидатов для текущей цели. Это должен быть список всех прослушивателей событий, которые были зарегистрированы для текущей цели в порядке их регистрации.
... что, вероятно, является частью того, почему IE9 делает это сейчас (IE9 заметно улучшил поддержку Microsoft стандартов событий, добавив addEventListener
и т. Д.).
Некоторые библиотеки JavaScript (например, jQuery) do гарантируют порядок независимо от браузера, прикрепляя только один обработчик на событие к элементу и поддерживая собственный список обработчиков пользовательского кода для запуска.