Приоритет событий DOM

В каком порядке приоритеты обрабатываются событиями в JavaScript?

Вот события в алфавитном порядке ...

  1. onabort - загрузка изображения прерванный
  2. onblur - элемент теряет фокус
  3. onchange - пользователь меняет содержание поля
  4. onclick - мышь щелкает объект
  5. ondblclick - дважды щелкает мышью объект
  6. onerror - ошибка возникает, когда загрузка документа или изображения
  7. onfocus - элемент получает фокус
  8. onkeydown - клавиша клавиатуры прижатый
  9. onkeypress - Клавиша клавиатуры нажал или удерживал
  10. onkeyup - Клавиша клавиатуры выпущенный
  11. onload - страница или изображение закончил загрузку
  12. onmousedown - кнопка мыши прижатый
  13. onmousemove - мышь перемещается
  14. onmouseout - мышь удалена элемент
  15. onmouseover - мышь перемещается над элементом
  16. onmouseup - кнопка мыши выпущенный
  17. onreset - кнопка сброса щелкнул
  18. onresize - Окно или фрейм измененный размер
  19. onselect - текст выделен
  20. onsubmit - кнопка отправки щелкнул
  21. onunload - Пользователь покидает страницу

В каком порядке они выводятся из очереди событий?

Я считаю, что приоритет не по принципу «первым пришел - первым обслужен» (FIFO).

Не забывайте эти ключевые события: ondragstart, ondragover, ondragend, ondblclick, oncontextmenu.

cronoklee 01.05.2019 14:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
60
1
26 058
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Тем не менее, Черновик рекомендации HTML 5 действительно пытается указать, как события будут помещаться в очередь и отправляться - цикл событий:

To coordinate events, user interaction, scripts, rendering, networking, and so forth, user agents must use event loops as described in this section.

There must be at least one event loop per user agent, and at most one event loop per unit of related similar-origin browsing contexts.

An event loop has one or more task queues. A task queue is an ordered list of tasks [...] When a user agent is to queue a task, it must add the given task to one of the task queues of the relevant event loop. All the tasks from one particular task source must always be added to the same task queue, but tasks from different task sources may be placed in different task queues. [...]

[...]a user agent could have one task queue for mouse and key events (the user interaction task source), and another for everything else. The user agent could then give keyboard and mouse events preference over other tasks three quarters of the time, keeping the interface responsive but not starving other task queues, and never processing events from any one task source out of order. [...]

Обратите внимание на последний бит: реализация браузера должна определять, какие события будут сгруппированы вместе и обработаны по порядку, а также приоритет, присвоенный любому конкретному типу события. Следовательно, нет оснований ожидать, что все браузеры будут отправлять события все в фиксированном порядке, сейчас или в будущем.

Если вы смотрите на события мыши / касания, Патрик Х. Лауке опубликовал разговор на эту тему. Определенно интересное чтение - и оно касается всех особенностей разных браузеров, разных устройств и разных стандартов.

Еще он связывает исчерпывающий набор тестов.

Для тех, кто хочет знать, как вызываются относительные события последовательности, см. Ниже. Пока тестировал только в Chrome.

  1. наведение указателя мыши
  2. мышь
  3. мышь

  1. мышь
  2. изменение (при сфокусированном вводе)
  3. размытие (на сфокусированном элементе)
  4. фокус
  5. мышь
  6. щелкнуть
  7. dblclick

  1. keydown
  2. нажатие клавиши
  3. клавиатура

Если я инициирую событие click, могу ли я также запускать предыдущие события (mousedown, change, blur, focus, mouseup)?

Oki Erie Rinaldi 03.04.2018 10:20

где здесь dragstart?

cronoklee 01.05.2019 14:49

Другие вопросы по теме