Работают ли обработчики событий в JavaScript для одного события как FIFO, LIFO или параллельно? - PullRequest
1 голос
/ 10 октября 2009

Есть ли в JavaScript обработчики событий для одного события, запущенного как FIFO, LIFO или параллельно?

Ответы [ 3 ]

4 голосов
/ 11 октября 2009

Это очень просто. Модуль событий DOM уровня 2 не определяет порядок , в котором должны запускаться прослушиватели событий. Однако модуль DOM Level 3 Events указывает, что порядок совпадает с порядком регистрации .

Первый зарегистрирован - первый уволен.

Обратите внимание, что модуль событий DOM уровня 3 все еще является черновиком , тогда как первый уровень 2 является рекомендацией . Тем не менее, современные браузеры часто следуют семантике именно этой черновой спецификации уровня 3, а не старой версии 2.

На практике, IIRC, только IE не соблюдает порядок прослушивателей событий. Все остальные браузеры реализуют его как FIFO (и как описано в DOM L3 Events). Вы также можете найти связанных тестов онлайн :)

3 голосов
/ 10 октября 2009

Из-за однопоточной природы JavaScript события и таймеры ставятся в очередь и выполняются последовательно по одному, они запускаются, когда в выполнении было открытие.

Лучше всего это продемонстрировать на диаграмме:

Events and Timers

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

Проверьте эту действительно хорошую статью о Таймеры и события Джона Резига.

0 голосов
/ 10 октября 2009

У PPK отличная запись на всплывающие и захваченные события.

http://www.quirksmode.org/js/events_order.html

...