Вопрос

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

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

<Ол>
  • onabort - загрузка изображения прервала
  • onblur - элемент теряет фокус
  • onchange - пользователь изменяет содержимое поля
  • onclick - мышь щелкает объект
  • ondblclick - мышь дважды щелкает мышью Объект
  • onerror - ошибка возникает, когда загрузка документа или изображения
  • onfocus - элемент получает фокус
  • onkeydown - клавиша клавиатуры нажимается
  • onkeypress - клавиша клавиатуры нажата или удерживается
  • onkeyup - клавиша клавиатуры  выпустила
  • onload - страница или изображение  завершена загрузка
  • onmousedown - кнопка мыши  нажимается
  • onmousemove - мышь перемещается
  • onmouseout - мышь отключена  элемент
  • onmouseover - мышь перемещается  над элементом
  • onmouseup - кнопка мыши  выпустила
  • onreset - кнопка сброса  щелкнул
  • onresize - окно или рамка  изменение размера
  • onselect - текст выделен
  • onsubmit - кнопка отправки  щелкнул
  • onunload - пользователь покидает страницу
  • В каком порядке они обрабатываются в очереди событий?

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

    Это было полезно?

    Решение

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

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

      

    Для координации событий пользователь   взаимодействие, скрипты, рендеринг,   сеть и т. д., пользовательские агенты   должны использовать циклы событий, как описано в   этот раздел.

         

    Должен быть хотя бы один цикл событий   за агента пользователя и самое большее одно событие   цикл на единицу связанных   контексты просмотра схожего происхождения.

         

    Цикл событий имеет одну или несколько задач   Очереди. Очередь заданий упорядочена   список задач [...]   Когда пользовательский агент ставит задачу в очередь,   он должен добавить задание к одному из   очереди задач соответствующего события   петля. Все задания от одного   конкретный источник задачи всегда должен быть   добавлен в ту же очередь задач, но   задачи из разных источников задач могут   помещаться в разные очереди задач.   [...]

         

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

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

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

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

    <Ол>
  • Наведите курсор мыши на
  • MouseMove
  • MouseOut
  • <Ч> <Ол>
  • MouseDown
  • изменить (при сфокусированном вводе)
  • размытие (на сфокусированном элементе)
  • фокус
  • mouseup
  • нажмите
  • dblclick
  • <Ч> <Ол>
  • KeyDown
  • нажатие клавиши
  • KeyUp
  • Если вы смотрите на события мыши / касания, Патрик Х. Лаук опубликовал доклад. на эту тему . Определенно интересное чтение & # 8211; и имеет дело со всеми причудами разных браузеров, разных устройств и разных стандартов.

    Он также связывает полный набор тестов .

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top