UI Events | События пользовательского интерфейса

UI Events | События пользовательского интерфейса

Аннотация

Эта спецификация определяет события пользовательского интерфейса, которые расширяют объекты DOM Event, определенные в [DOM]. События пользовательского интерфейса, как правило, реализуются визуальными пользовательскими агентами для обработки взаимодействия с пользователем, такого как ввод с помощью мыши и клавиатуры.

Ссылка на первоисточник

https://www.w3.org/TR/uievents/

 

Оглавление

1. Введение
1.1 Обзор
1.2 Соответствие
1.2.1 Веб-браузеры и другие динамические или интерактивные пользовательские агенты
1.2.2 Авторские инструменты
1.2.3 Авторы контента и контент
1.2.4 Спецификации и языки хоста
2. Стилистические условности
3. Архитектура DOM Event
3.1 Отправка событий и поток событий DOM
3.2 Действия по умолчанию и отменяемые события
3.3 Синхронные и асинхронные события
3.4 Доверенные события
3.5 Активация триггеров и поведение
3.6 Построение событий мыши и клавиатуры
4. Типы событий
4.1 События пользовательского интерфейса
4.1.1 Интерфейс UIEvent
4.1.1.1 UIEvent
4.1.1.2 UIEventInit
4.1.2 Типы событий пользовательского интерфейса
4.1.2.1 Тип события load
4.1.2.2 Тип события unload
4.1.2.3 Тип события abort
4.1.2.4 Тип события error
4.1.2.5 Тип события select
4.2 События фокуса
4.2.1 Интерфейс FocusEvent
4.2.1.1 FocusEvent
4.2.1.2 FocusEventInit
4.2.2 Порядок события фокуса
4.2.3 Фокус документа и фокус контекста
4.2.4 Типы событий фокуса
4.2.4.1 Тип события фокуса – blur
4.2.4.2 Тип события фокуса – focus
4.2.4.3 Тип события фокуса – focusin
4.2.4.4 Тип события фокуса – focusout
4.3 События мыши
4.3.1 Интерфейс MouseEvent
4.3.1.1 MouseEvent
4.3.1.2 MouseEventInit
4.3.2 Инициализаторы модификаторов событий
4.3.3 Порядок событий мыши
4.3.4 Типы событий мыши (Mouse Event Types)
4.3.4.1 Тип события мыши auxclick
4.3.4.2 Тип события мыши click
4.3.4.3 Тип события мыши dblclick
4.3.4.4 Тип события мыши mousedown
4.3.4.5 Тип события мыши mouseenter
4.3.4.6 Тип события мыши mouseleave
4.3.4.7 Тип события мыши mousemove
4.3.4.8 Тип события мыши mouseout
4.3.4.9 Тип события мыши mouseover
4.3.4.10 Тип события мыши mouseup
4.4 События колеса
4.4.1 Интерфейс WheelEvent
4.4.1.1 WheelEvent
4.4.1.2 WheelEventInit
4.4.2 Типы колесных событий
4.4.2.1 Тип колёсного события wheel
4.4.2.2 Отменяемость событий колеса
4.5 Входные события (Input Events)
4.5.1 Интерфейс InputEvent
4.5.1.1 InputEvent
4.5.1.2 InputEventInit
4.5.2 Порядок событий ввода
4.5.3 Типы вводных событий (событий ввода)
4.5.3.1 Тип вводного события – beforeinput
4.5.3.2 Тип вводного события – input
4.6 События клавиатуры
4.6.1 Интерфейс KeyboardEvent
4.6.1.1 KeyboardEvent
4.6.1.2 KeyboardEventInit
4.6.2 Расположение клавиш событий клавиатуры
4.6.3 Порядок событий клавиатуры
4.6.4 Типы событий клавиатуры
4.6.4.1 Тип события клавиатуры – keydown
4.6.4.2 Тип события клавиатуры – keyup
4.7 События Композиции
4.7.1 Интерфейс CompositionEvent
4.7.1.1 CompositionEvent
4.7.1.2 CompositionEventInit
4.7.2 Порядок событий композиции
4.7.3 Системы распознавания рукописного ввода
4.7.4 Отмена событий композиции
4.7.5 Ключевые события во время композиции
4.7.6 Входные события во время композиции
4.7.7 Типы Событий Композиции
4.7.7.1 Тип события композиции – compositionstart
4.7.7.2 Тип события композиции – compositionupdate
4.7.7.3 Тип события композиции – compositionend
5. События клавиатуры и значения клавиш
5.1 Ввод с клавиатуры
5.1.1 Ключевые Легенды
5.2 Код клавиши
5.2.1 Мотивация для атрибута code
5.2.2 Связь между ключом и кодом
5.2.3 Примеры code
5.2.4 code и виртуальные клавиатуры
5.3 События клавиатуры key значения
5.3.1 Клавиша-модификатор
5.3.2 Мертвые клавиши
5.3.3 Редакторы Методов Ввода
5.3.3.1 Клавиши режима редактора метода ввода
5.3.4 Действия по умолчанию и отменяемые события клавиатуры
6. Инициализаторы Унаследованных Событий
6.1 Унаследованные Интерфейсы Инициализатора Событий
6.1.1 Инициализаторы для интерфейса UIEvent
6.1.2 Инициализаторы для интерфейса MouseEvent
6.1.3 Инициализаторы для интерфейса WheelEvent
6.1.4 Инициализаторы для интерфейса KeyboardEvent
6.1.5 Инициализаторы для интерфейса CompositionEvent
7. Устаревшие Атрибуты Событий Key и Mouse
7.1 Унаследованный UIEvent дополнительный интерфейс
7.1.1 Интерфейс UIEvent (дополнительный)
7.1.2 Интерфейс UIEventInit (дополнительный)
7.2 Устаревший дополнительный интерфейс KeyboardEvent
7.2.1 Интерфейс KeyboardEvent (дополнительный)
7.2.2 Интерфейс KeyboardEventInit (дополнительный)
7.3 Устаревшие ключевые модели
7.3.1 Как определить keyCode для событий keydown и keyup?
7.3.2 Как определить keyCode для событий нажатия клавиш keypress?
7.3.3 Фиксированные виртуальные коды клавиш
7.3.4 Опционально фиксированные виртуальные коды ключей
8. Устаревшие Типы Событий
8.1. Устаревшие события UIEvent
8.1.1. Устаревшие типы событий UIEvent
8.1.1.1. DOMActivate
8.1.2. Порядок событий активации
8.2. Устаревшие события FocusEvent
8.2.1. Устаревшие типы событий FocusEvent
8.2.1.1. DOMFocusIn
8.2.1.2. DOMFocusOut
8.2.2 Устаревший порядок событий FocusEvent
8.3 Устаревшие события KeyboardEvent
8.3.1 Устаревшие типы событий KeyboardEvent
8.3.1.1. keypress
8.3.2. Порядок событий нажатия клавиш
8.4. Устаревшие события MutationEvent
8.4.1. Интерфейс MutationEvent
8.4.2 Устаревшие типы событий MutationEvent
8.4.2.1. DOMAttrModified
8.4.2.2. DOMCharacterDataModified
8.4.2.3. DOMNodeInserted
8.4.2.4. DOMNodeInsertedIntoDocument
8.4.2.5. DOMNodeRemoved
8.4.2.6. DOMNodeRemovedFromDocument
8.4.2.7. DOMSubtreeModified
9. Расширение событий
9.1 Введение в расширенные события
9.2 Пользовательские События
9.3 Расширения Для Конкретной Реализации
9.3.1 Известные специфичные для реализации префиксы
10. Вопросы безопасности
11. Изменения
11.1 Изменения между событиями DOM Level 2 и событиями пользовательского интерфейса
11.1.1 Изменения в потоке событий DOM Level 2
11.1.2 Изменения в типах событий DOM Level 2
11.1.3 Изменения в интерфейсах событий уровня 2 DOM
11.1.4 Новые интерфейсы
11.2 Изменения между различными проектами событий пользовательского интерфейса
12. Благодарности
13. Глоссарий
Соответствие
Индекс
Термины, определенные настоящей спецификацией
Термины, определяемые ссылкой
Ссылки
Нормативные ссылки
Информационные ссылки
Индекс IDL

 

1. Введение

1.1 Обзор

UI Events разработан с двумя основными целями:

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

Вторая цель событий пользовательского интерфейса — предоставить общее подмножество текущих систем событий, используемых в существующих браузерах. Это предназначено для обеспечения совместимости существующих сценариев и контента. Не ожидается, что эта цель будет достигнута при полной обратной совместимости. Тем не менее, спецификация пытается достичь этого, когда это возможно.

1.2 Соответствие

Этот раздел является нормативным.

Ключевые слова «ОБЯЗАН — MUST», «НЕ ОБЯЗАН — MUST NOT», «ТРЕБУЕТСЯ — REQUIRED», «ДОЛЖЕН — SHALL», «НЕ ДОЛЖЕН — SHALL NOT», «СЛЕДУЕТ — SHOULD», «НЕ СЛЕДУЕТ — SHOULD NOT», «РЕКОМЕНДУЕТСЯ — RECOMMENDED», «НЕ РЕКОМЕНДУЕТСЯ — NOT RECOMMENDED», «ВОЗМОЖЕН — MAY» и «ДОПОЛНИТЕЛЬНО — OPTIONAL» в этом документе интерпретироваться как описано в [RFC2119 #] [RFC8174 #].

Эта спецификация должна пониматься в контексте спецификации DOM Level 3 Core [DOM-Level-3-Core], и применяются общие соображения для реализаций DOM. Например, обработка URI пространства имен обсуждается в пространствах имен XML. Дополнительную информацию о соответствии см. в спецификации DOM Level 3 Core [DOM-Level-3-Core]. Пользовательский агент не обязан полностью соответствовать другой спецификации, чтобы соответствовать этой спецификации, но он ДОЛЖЕН соответствовать определенным частям любой другой спецификации, которые вызываются в этой спецификации (например, соответствующий пользовательский агент событий пользовательского интерфейса) ДОЛЖЕН поддерживать тип данных DOMString, определенный в [[Web IDL]], но не обязательно должен поддерживать каждый метод или тип данных, определенные в [[Web IDL]], для соответствия событиям пользовательского интерфейса).

Эта спецификация определяет несколько классов соответствия для различных пользовательских агентов, спецификаций и авторов контента:

1.2.1 Веб-браузеры и другие динамические или интерактивные пользовательские агенты

Динамический или интерактивный пользовательский агент, называемый здесь браузером (будь то веб-браузер, приложение AT (технология доступности) или другая подобная программа), соответствует событиям пользовательского интерфейса, если он поддерживает:

  • основной модуль, определенный в [DOM-Level-3-Core]
  • §3.1 Диспетчер событий и механизм потока событий DOM
  • все интерфейсы и события со связанными с ними методами, атрибутами и семантикой, определенными в этой спецификации, за исключением тех, которые помечены как устаревшие (соответствующий пользовательский агент МОЖЕТ реализовать устаревшие интерфейсы, события или API для обратной совместимости, но не обязан делать так, чтобы соответствовать)
  • полный набор значений ключа и кода, определенных в [UIEvents-Key] и [UIEvents-Code] (в зависимости от доступности платформы)
  • все остальные нормативные требования, определенные в данной спецификации

Соответствующий браузер ДОЛЖЕН отправлять события, соответствующие заданной EventTarget, когда выполнены условия, определенные для этого типа события.

Браузер специально соответствует событиям пользовательского интерфейса, если он реализует интерфейсы и связанные с ними типы событий, указанные в §4 «Типы событий».

Соответствующий браузер ДОЛЖЕН поддерживать сценарии, декларативную интерактивность или некоторые другие средства обнаружения и отправки событий способом, описанным в настоящей спецификации, и ДОЛЖЕН поддерживать API-интерфейсы, указанные для этого типа событий.

В дополнение к удовлетворению всех других критериев соответствия, соответствующий браузер МОЖЕТ реализовать функции этой спецификации, помеченные как устаревшие, для обратной совместимости с существующим контентом, но такая реализация не рекомендуется.

Соответствующий браузер МОЖЕТ также поддерживать функции, которых нет в этой спецификации, но которые используют механизм диспетчеризации событий §3.1 и механизм потока событий DOM, интерфейсы, события или другие функции, определенные в этой спецификации, и МОГУТ реализовывать дополнительные интерфейсы и типы событий, соответствующие этой реализации. Такие функции могут быть позже стандартизированы в будущих спецификациях.

Браузер, который не соответствует всем необходимым частям этой спецификации, НЕ ДОЛЖЕН требовать соответствия событиям пользовательского интерфейса. Такая реализация, которая соответствует частям этой спецификации, МОЖЕТ претендовать на соответствие этим конкретным частям.

Соответствующий браузер ДОЛЖЕН также быть соответствующей реализацией фрагментов IDL в этой спецификации, как описано в спецификации Web IDL [WebIDL].

1.2.2 Авторские инструменты

Инструмент создания контента соответствует событиям пользовательского интерфейса, если он создает контент, который использует типы событий и §3.1 Диспетчеризация событий и модель потока событий DOM, в соответствии с определением, приведенным в данной спецификации.

Инструмент разработки контента НЕ ДОЛЖЕН требовать соответствия событиям пользовательского интерфейса для контента, который он создает, который использует функции этой спецификации, помеченные как устаревшие в этой спецификации.

Соответствующий инструмент разработки контента ДОЛЖЕН предоставлять автору контента средства для использования всех типов событий и интерфейсов, подходящих для всех основных языков в создаваемом документе контента.

1.2.3 Авторы контента и контент

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

Автор контента НЕ ДОЛЖЕН использовать функции этой спецификации, помеченные как устаревшие, но ДОЛЖЕН полагаться на механизмы замены, определенные в этой спецификации и в других местах.

Соответствующий контент ДОЛЖЕН использовать семантику интерфейсов и типы событий, как описано в этой спецификации.

Авторам контента рекомендуется следовать передовой практике, как описано в спецификациях рекомендаций по доступности и интернационализации.

1.2.4 Спецификации и языки хоста

Спецификация или язык хоста соответствуют событиям пользовательского интерфейса, если они ссылаются и используют §3.1 диспетчеризацию событий и механизм потока событий DOM, интерфейсы, события или другие функции, определенные в [DOM], и не расширяют эти функции несовместимыми способами.

Спецификация или язык хоста специально соответствуют событиям пользовательского интерфейса, если они ссылаются и используют интерфейсы и связанные типы событий, указанные в §4 «Типы событий». Соответствующая спецификация МОЖЕТ определять дополнительные интерфейсы и типы событий, соответствующие этой спецификации, или МОЖЕТ расширять интерфейсы UI Events и типы событий таким образом, чтобы это не противоречило или не противоречило определениям этих интерфейсов и типов событий в этой спецификации.

Спецификации или языки хоста, которые ссылаются на события пользовательского интерфейса, НЕ ДОЛЖНЫ использовать или рекомендовать функции этой спецификации, помеченные как устаревшие, но ДОЛЖНЫ использовать или рекомендовать указанную замену для этой функции (если доступна).

 

2. Стилистические условности

Данная спецификация соответствует Предложенным условным обозначениям W3C со следующими дополнительными дополнениями:

  • Колпачок клавиши, напечатанный на клавише, отображается как ↓, = или Q. Он используется для обозначения клавиши с точки зрения пользователя, без учета значения ключа и кода в сгенерированном KeyboardEvent.
  • Символы, обозначающие символы, отображаются как: «𣧂».
  • Кодировки символов Unicode отображаются как: U + 003d.
  • Имена значений клавиш, генерируемых нажатием клавиши (то есть значение KeyboardEvent.key), отображаются как: «ArrowDown», «=», «q» или «Q».
  • Имена кодов клавиш, связанных с физическими клавишами (то есть значение KeyboardEvent.code), отображаются как: «ArrowDown», «Equal» или «KeyQ».

Кроме того, в данном описании используются определенные термины с определенными значениями. Термин «реализация» (implementation) применяется к браузеру, инструменту создания контента или другому пользовательскому агенту, который реализует эту спецификацию, в то время как автор контента — это человек, который пишет скрипт или код, использующий преимущества описанных интерфейсов, методов, атрибутов, событий и других описанных функций в этой спецификации для создания веб-приложений, а пользователь — это человек, который использует эти веб-приложения в реализации.

И наконец:

Это примечание

Это открытый вопрос.

Это предупреждение.

Пример интерфейса {
// Это определение IDL.
};

 

3. Архитектура DOM Event

Этот раздел не является нормативным. Обратитесь к [DOM] для нормативного описания архитектуры событий DOM

3.1 Отправка событий и поток событий DOM

В этом разделе дается краткий обзор механизма отправки событий и описывается, как события распространяются через дерево DOM. Приложения могут отправлять объекты событий с помощью метода dispatchEvent(), и объект событий будет распространяться через дерево DOM, как определено потоком событий DOM.

Графическое представление события, отправляемого в дереве DOM с использованием потока событий DOM
Графическое представление события, отправляемого в дереве DOM с использованием потока событий DOM

Объекты события отправляются в цель события. Но прежде чем начнется диспетчеризация, сначала необходимо определить путь распространения объекта события.

Путь распространения (propagation path)- это упорядоченный список целей текущего события, через которые проходит событие. Этот путь распространения отражает иерархическую древовидную структуру документа. Последний элемент в списке — это цель события, а предыдущие элементы в списке называются предками цели (target’s ancestors), а непосредственно предшествующий элемент — родителем цели (target’s parent).

Как только путь распространения определен, объект события проходит одну или несколько фаз события. Есть три фазы события: фаза захвата, фаза цели, фаза пузыря. Объекты событий завершают эти фазы, как описано ниже. Фаза будет пропущена, если она не поддерживается или если распространение объекта события остановлено. Например, если для атрибута bubbles установлено значение false, фаза пузыря будет пропущена, а если перед отправкой был вызван stopPropagation(), все фазы будут пропущены.

  1. Фаза захвата (capture phase): объект события распространяется через предков цели из окна в родительский объект цели. Эта фаза также называется фазой захвата.
  2. Фаза цели (target phase): объект события прибывает к цели события объекта события. Эта фаза также известна как фаза достижения цели. Если тип события указывает, что событие не всплывает, то объект события будет остановлен после завершения этой фазы.
  3. Фаза пузыря (bubble phase): объект события распространяется через предков цели в обратном порядке, начиная с родительского объекта цели и заканчивая окном. Эта фаза также называется «фазой всплытия» (bubbling phase).

3.2 Действия по умолчанию и отменяемые события

События обычно отправляются реализацией в результате действий пользователя, в ответ на завершение задачи или для оповещения о ходе выполнения во время асинхронной активности (такой как сетевой запрос). Некоторые события могут использоваться для управления поведением, которое может предпринять реализация (или отменить действие, уже выполненное реализацией). События в этой категории называются отменяемыми, а поведение, которое они отменяют, называется действием по умолчанию. Отменяемые объекты событий могут быть связаны с одним или несколькими «действиями по умолчанию». Чтобы отменить событие, вызовите метод protectDefault().

Пример 1

Событие mousedown отправляется сразу после того, как пользователь нажимает кнопку на указывающем устройстве (обычно мыши). Одним из возможных действий по умолчанию, предпринимаемых реализацией, является настройка конечного автомата, который позволяет пользователю перетаскивать изображения или выбирать текст. Действие по умолчанию зависит от того, что произойдет дальше — например, если указывающее устройство пользователя находится над текстом, выбор текста может начаться. Если указывающее устройство пользователя находится над изображением, то может начаться действие перетаскивания изображения. Предотвращение действия по умолчанию для события mousedown предотвращает выполнение этих действий.

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

Пример 2

Действие по умолчанию, связанное с событием click для элементов <input type = «checkbox»>, переключает значение отмеченного атрибута IDL этого элемента. Если действие по умолчанию для события click отменено, то значение восстанавливается до прежнего состояния.

Когда событие отменяется, тогда условные действия по умолчанию, связанные с событием, пропускаются (или, как упоминалось выше, если действия по умолчанию выполняются до отправки, их эффект отменяется). То, является ли объект события отменяемым, указывается атрибутом cancellable. Вызов preventDefault() останавливает все связанные действия по умолчанию для объекта события. Атрибут defaultPrevented указывает, было ли событие уже отменено (например, предыдущим прослушивателем событий). Если приложение DOM само инициировало диспетчеризацию, то возвращаемое значение метода dispatchEvent() указывает, был ли объект события отменен.

Многие реализации дополнительно интерпретируют возвращаемое значение прослушивателя событий, такое как значение false, чтобы означать, что действие отменяемых событий по умолчанию будет отменено (хотя обработчики window.onerror отменяются возвращением true).

3.3 Синхронные и асинхронные события

События могут отправляться либо синхронно, либо асинхронно.

Синхронные события (sync events) обрабатываются так, как если бы они были в виртуальной очереди в модели «первым пришел — первым обслужен», упорядочены по последовательности временных событий относительно других событий, изменений в DOM и пользователя взаимодействие. Каждое событие в этой виртуальной очереди задерживается до тех пор, пока предыдущее событие не завершит свое поведение распространения или не будет отменено. Некоторые события синхронизации управляются определенным устройством или процессом, например событиями кнопки мыши. Эти события регулируются алгоритмами порядка событий, определенными для этого набора событий, и пользовательские агенты будут отправлять эти события в определенном порядке.

Асинхронные события (async events), могут отправляться по мере завершения результатов действия, без связи с другими событиями, другими изменениями в DOM или взаимодействием с пользователем.

Пример 3

Во время загрузки документа элемент встроенного скрипта анализируется и выполняется. Событие load ставится в очередь для асинхронного запуска в элементе script. Однако, поскольку это асинхронное событие, его порядок относительно других синхронных событий, запускаемых во время загрузки документа (например, событие DOMContentLoaded из [HTML5]), не гарантируется.

3.4 Доверенные события

События, сгенерированные пользовательским агентом, либо в результате взаимодействия с пользователем, либо как прямой результат изменений в DOM, доверяются пользовательскому агенту с привилегиями, которые не предоставляются событиям, генерируемым сценарием через метод createEvent(), измененный с помощью метода initEvent() или отправленный с помощью метода dispatchEvent(). Атрибут isTrusted доверенных событий имеет значение true, в то время как ненадежные события имеют значение атрибута isTrustedfalse.

Большинство ненадежных событий не будут вызывать действия по умолчанию, за исключением события click. Это событие всегда запускает действие по умолчанию, даже если атрибут isTrusted имеет значение false (это поведение сохраняется для обратной совместимости). Все другие ненадежные события ведут себя так, как если бы для этого события был вызван метод preventDefault().

3.5 Активация триггеров и поведение

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

Пример № 4

И HTML, и SVG имеют элемент <a>, который указывает на ссылку. Соответствующими триггерами активации для элемента <a> являются событие нажатия на текстовое или графическое содержимое элемента <a> или событие нажатия клавиши со значением атрибута ключа «Enter», когда элемент <a> имеет фокус. Поведение активации для элемента <a> обычно заключается в изменении содержимого окна на содержимое нового документа, в случае внешних ссылок, или изменении положения текущего документа относительно нового якоря, в случае внутренней ссылки.

Триггер активации — это действие пользователя или событие, которое указывает реализации, что поведение активации должно быть инициировано. Инициируемые пользователем триггеры активации включают нажатие кнопки мыши на активируемом элементе, нажатие клавиши Enter, когда активируемый элемент имеет фокус, или нажатие клавиши, которая каким-либо образом связана с активируемым элементом (горячая клавиша или клавиша доступа), даже если этот элемент делает это, не имея фокуса. Триггеры активации на основе событий могут включать в себя события на основе таймера, которые активируют элемент в определенное время или по истечении определенного периода времени, события прогресса после выполнения определенного действия или многие другие события на основе условий или состояний.

3.6 Построение событий мыши и клавиатуры

Как правило, когда вызывается конструктор интерфейса Event или интерфейса, унаследованного от интерфейса Event, следует выполнить шаги, описанные в [DOM]. Однако интерфейсы KeyboardEvent и MouseEvent предоставляют дополнительные элементы словаря для инициализации внутреннего состояния ключевых модификаторов объекта Event: в частности, внутреннего состояния, запрашиваемого для использования методов getModifierState() клавиатурный и getModifierState() мышиный. Этот раздел дополняет шаги DOM4 для инициализации нового объекта Event с помощью этих необязательных состояний модификатора.

В целях конструирования KeyboardEvent, MouseEvent или объекта, полученного из этих объектов с использованием приведенного ниже алгоритма, все KeyboardEvent, MouseEvent и производные объекты имеют внутреннее состояние модификатора ключа, которое может быть установлено и получено с использованием имен модификаторов ключей, описанных в таблице «Модификаторов ключей» [UIEvents-Key].

Следующие шаги дополняют алгоритм, определенный для построения событий в DOM4:

  • Если создаваемое событие является объектом KeyboardEvent или MouseEvent или объектом, который является производным от любого из них, и аргумент EventModifierInit был предоставлен конструктору, то выполните следующие подэтапы:
    • Для каждого аргумента EventModifierInit, если элемент словаря начинается со строки «modifier» (модификатор), тогда пусть имя ключа-модификатора будет именем члена словаря, исключая префикс «modifier», и задайте состояние внутреннего модификатора ключа объекта Event, соответствующее имени модификатора ключа. на соответствующее значение.

 

4. Типы событий

Модель событий DOM позволяет реализации DOM поддерживать несколько модулей событий. Модель была разработана для добавления новых модулей событий в будущем. Этот документ не пытается определить все возможные события. В целях взаимодействия DOM определяет модуль событий пользовательского интерфейса, включая события, зависящие от устройства более низкого уровня, и модуль событий мутации документа.

4.1 События пользовательского интерфейса

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

4.1.1 Интерфейс UIEvent

Представлено в DOM Level 2

Интерфейс UIEvent предоставляет конкретную контекстную информацию, связанную с событиями интерфейса пользователя.

Чтобы создать экземпляр интерфейса UIEvent, используйте конструктор UIEvent, передавая дополнительный словарь UIEventInit.

Для вновь определенных событий вам не нужно наследовать интерфейс UIEvent только потому, что они связаны с пользовательским интерфейсом. Наследовать только тогда, когда члены UIEventInit имеют смысл для этих событий.

4.1.1.1 UIEvent

[Constructor(DOMString type, optional UIEventInit eventInitDict), Exposed=Window]
interface UIEvent : Event {
readonly attribute Window? view;
readonly attribute long detail;
};

UIEvent . view

Атрибут view идентифицирует объект Window, из которого было сгенерировано событие.
Неинициализированное значение этого атрибута ДОЛЖНО быть null

UIEvent . detail

Определяет некоторую подробную информацию о Event, в зависимости от типа события.

Неинициализированное значение этого атрибута ДОЛЖНО быть «0».

4.1.1.2 UIEventInit

dictionary UIEventInit : EventInit {
Window? view = null;
long detail = 0;
};

UIEventInit . view

Должен быть инициализирован для объекта Window глобальной среды, в которую будет отправлено это событие. Если это событие будет отправлено элементу, свойство view должно быть установлено для объекта Window, содержащего ownerDocument элемента.

UIEventInit . detail

Это значение инициализируется числом, зависящим от приложения.

4.1.2 Типы событий пользовательского интерфейса

Типы событий интерфейса пользователя перечислены ниже. Некоторые из этих событий используют интерфейс UIEvent, если оно сгенерировано из пользовательского интерфейса, но интерфейс Event в противном случае, как подробно описано в каждом событии.

4.1.2.1 Тип события load
Тип события load
Интерфейс UIEvent, если генерируется из пользовательского интерфейса, иначе Event
Синх / Асин Асинхронный
Всплытие Нет
Надежные цели Window, Document, Element
Отменяемый Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : общий объект, чьи ресурсы загружены
UIEvent.view : Window
UIEvent.detail : 0

Пользовательский агент ДОЛЖЕН отправить это событие, когда реализация DOM завершит загрузку ресурса (такого как документ) и любых зависимых ресурсов (таких как изображения, таблицы стилей или сценарии). Зависимые ресурсы, которые не могут быть загружены, НЕ ДОЛЖНЫ препятствовать запуску этого события, если ресурс, который их загрузил, все еще доступен через DOM. Если этот тип события отправляется, реализации ОБЯЗАНЫ отправлять это событие хотя бы на узел Document.

По унаследованным причинам события загрузки «load» ресурсов внутри документа (например, изображения) не включают объект Window в пути распространения в реализациях HTML. Смотри [HTML5] для получения дополнительной информации.

4.1.2.2 Тип события unload
Тип события unload
Интерфейс UIEvent, если генерируется из пользовательского интерфейса, иначе Event
Синх / Асин Cинхронный
Всплытие Нет
Надежные цели Window, Document, Element
Отменяемый Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : общий объект, чьи ресурсы были удалены
UIEvent.view : Window
UIEvent.detail : 0

Пользовательский агент ДОЛЖЕН отправлять это событие, когда реализация DOM удаляет из среды ресурс (такой как документ) или любые зависимые ресурсы (такие как изображения, таблицы стилей, сценарии). Документ ДОЛЖЕН быть выгружен после отправки этого типа события. Если этот тип события отправляется, реализации ОБЯЗАНЫ отправлять это событие хотя бы на узел Document.

4.1.2.3 Тип события abort
Тип события abort
Интерфейс UIEvent, если генерируется из пользовательского интерфейса, иначе Event
Синх / Асин Cинхронный
Всплытие Нет
Надежные цели Window, Element
Отменяемый Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, ресурсы которого были остановлены от загрузки без ошибок
UIEvent.view : Window
UIEvent.detail : 0

Пользовательский агент ДОЛЖЕН отправить это событие, когда загрузка ресурса была прервана, например, если пользователь отменил загрузку, пока она еще не завершена.

4.1.2.4 Тип события error
Тип события error
Интерфейс UIEvent, если генерируется из пользовательского интерфейса, иначе Event
Синх / Асин Асинхронный
Всплытие Нет
Надежные цели Window, Element
Отменяемый Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, ресурсы которого были остановлены из-за ошибки
UIEvent.view : Window
UIEvent.detail : 0

Пользовательский агент ДОЛЖЕН отправить это событие, когда ресурс не загрузился или был загружен, но не может быть интерпретирован в соответствии с его семантикой, такой как недопустимое изображение, ошибка выполнения скрипта или неправильно сформированный XML.

4.1.2.5 Тип события select
Тип события select
Интерфейс UIEvent, если генерируется из пользовательского интерфейса, иначе Event
Синх / Асин Синхронный
Всплытие Есть
Надежные цели Element
Отменяемый Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, текстовое содержимое которого было выбрано
UIEvent.view : Window
UIEvent.detail : 0

Пользовательский агент ДОЛЖЕН отправить это событие, когда пользователь выбирает какой-либо текст. Это событие отправляется после того, как выбор произошел.

Эта спецификация не предоставляет контекстную информацию для доступа к выбранному тексту. Где это применимо, основной язык ДОЛЖЕН определять правила того, как пользователь МОЖЕТ выбирать контент (с учетом международных языковых соглашений), в какой момент отправляется событие select и как автор контента МОЖЕТ получать доступ к выбранному пользователем контенту.

Чтобы получить доступ к выбранному пользователем содержимому, авторы содержимого будут использовать собственные возможности основных языков, такие как метод Document.getSelection() API-интерфейсов редактирования HTML [Редактирование].

Событие select может быть недоступно для всех элементов на всех языках. Например, в [HTML5] события select можно отправлять только для элементов ввода формы <input> и элементов <textarea>. Реализации могут отправлять события выбора select в любом контексте, который считается подходящим, включая выбор текста вне элементов управления формой или выбор изображений или разметки, например в SVG.

4.2 События фокуса

Этот интерфейс и связанные с ним типы событий и §4.2.2 Порядок событий фокуса были разработаны в соответствии с концепциями и рекомендациями, определенными в Руководстве по доступности агента пользователя 2.0 [UAAG20], с особым вниманием к механизму фокуса и терминам, определенным в записи глоссария. для фокуса.

4.2.1 Интерфейс FocusEvent

Введено в эту спецификацию

Интерфейс FocusEvent предоставляет конкретную контекстную информацию, связанную с событиями Focus.

Чтобы создать экземпляр интерфейса FocusEvent, используйте конструктор FocusEvent, передавая дополнительный словарь FocusEventInit.

4.2.1.1 FocusEvent

[Constructor(DOMString type, optional FocusEventInit eventInitDict), Exposed=Window]
interface FocusEvent : UIEvent {
readonly attribute EventTarget? relatedTarget;
};

FocusEvent . relatedTarget

Используется для определения вторичной EventTarget, связанной с событием Focus, в зависимости от типа события.

По соображениям безопасности с вложенными контекстами просмотра, при переходе во вложенный контекст или вне него соответствующий объект EventTarget ДОЛЖЕН быть null.

Неинициализированное значение этого атрибута ДОЛЖНО быть null.

4.2.1.2 FocusEventInit

 

dictionary FocusEventInit : UIEventInit {
EventTarget? relatedTarget = null;
};

FocusEventInit . relatedTarget

RelatedTarget следует инициализировать элементом, теряющим фокус (в случае события focus или focusin) или элементом, получающим фокус (в случае события blur или focusout).

4.2.2 Порядок события фокуса

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

Номер Тип события Примечание
Пользователь смещает фокус
1 focusin Отправляется до того, как первый целевой элемент получает фокус
2 focus Отправляется после того, как первый целевой элемент получает фокус
Пользователь смещает фокус
3 focusout Отправляется до того, как первый целевой элемент теряет фокус
4 focusin Отправляется до того, как второй целевой элемент получает фокус
5 blur Отправляется после того, как первый целевой элемент теряет фокус
6 focus Отправляется после того, как второй целевой элемент получает фокус

Эта спецификация не определяет поведение событий фокуса при взаимодействии с такими методами, как focus() или blur(). См. Соответствующие спецификации, где эти методы определены для такого поведения.

4.2.3 Фокус документа и фокус контекста

Этот модуль событий включает типы событий для уведомления об изменениях в фокусе документа. Есть три различных контекста фокуса, которые имеют отношение к этому обсуждению:

  1. Контекст фокусировки операционной системы (operating system focus context), который МОЖЕТ быть в одном из множества различных приложений, работающих в данный момент на компьютере. Одним из таких приложений с фокусом может быть браузер.
  2. Когда браузер имеет фокус, пользователь может переключать (например, с помощью клавиши табуляции) контекст фокуса приложения между различными полями пользовательского интерфейса браузера (например, строкой веб-сайта, полем поиска и т. д.). Одним из этих полей пользовательского интерфейса может быть документ, отображаемый на вкладке.
  3. Когда сам документ имеет фокус, контекст фокуса документа может быть установлен на любой из фокусируемых элементов в документе.

Типы событий, определенные в этой спецификации, имеют дело исключительно с фокусом документа, а цель события, указанная в деталях события, ДОЛЖНА быть только частью документа или документов в окне, но не частью браузера или операционной системы, даже при переключении с одного на другой, чтобы сфокусировать контекст на другом.

Обычно документ всегда имеет фокусированный элемент (даже если это сам элемент документа) и постоянное кольцо фокуса. При переключении между контекстами фокуса текущий элемент документа и кольцо фокусировки обычно остаются в своем текущем состоянии. Например, если документ имеет три фокусируемых элемента со вторым элементом, когда пользователь переключает фокус операционной системы на другое приложение, а затем обратно в браузер, второй элемент по-прежнему будет фокусироваться внутри документа, а табуляция будет изменять сосредотачиваясь на третьем элементе. Основной язык МОЖЕТ определять конкретные элементы, которые могут получать фокус, условия, при которых элемент МОЖЕТ получать фокус, средства, с помощью которых МОЖЕТ изменяться фокус, и порядок, в котором фокус изменяется. Например, в некоторых случаях элемент может получить фокус, перемещая указатель над ним, в то время как другие обстоятельства могут потребовать щелчка мышью. Некоторые элементы могут вообще не фокусироваться, а некоторые могут фокусироваться только специальными средствами (щелчок по элементу), но не с помощью вкладок к нему. Документы МОГУТ содержать несколько колец фокусировки. Другие спецификации МОГУТ определять более сложную модель фокуса, чем описано в этой спецификации, включая разрешение нескольких элементов иметь текущий фокус.

4.2.4 Типы событий фокуса

Типы событий Focus перечислены ниже.

4.2.4.1 Тип события фокуса — blur
Тип события фокуса blur
Интерфейс FocusEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Window, Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : цель события потеряла фокус
UIEvent.view : Window
UIEvent.detail : 0
FocusEvent.relatedTarget : цель события, получающая фокус

Пользовательский агент ДОЛЖЕН отправить это событие, когда цель события теряет фокус. Фокус ДОЛЖЕН быть взят из элемента перед отправкой этого типа события. Этот тип события похож на focusout, но отправляется после смещения фокуса и не всплывает.

4.2.4.2 Тип события фокуса — focus
Тип события фокуса focus
Интерфейс FocusEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Window, Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : цель события, получающая фокус
UIEvent.view : Window
UIEvent.detail : 0
FocusEvent.relatedTarget : цель события теряющая фокус (если есть)

Пользовательский агент ДОЛЖЕН отправить это событие, когда цель события получает фокус. Фокус ДОЛЖЕН быть отдан элементу перед отправкой этого типа события. Этот тип события похож на focusin, но отправляется после смещения фокуса и не всплывает.

4.2.4.3 Тип события фокуса — focusin
Тип события фокуса focusin
Интерфейс FocusEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Window, Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : цель события, получающая фокус
UIEvent.view : Window
UIEvent.detail : 0
FocusEvent.relatedTarget : цель события теряющая фокус (если есть)

Пользовательский агент ДОЛЖЕН отправить это событие, когда цель события должна получить фокус. Этот тип события ДОЛЖЕН быть отправлен до того, как элемент получает фокус. Цель события ДОЛЖНА быть элементом, который должен получить фокус. Этот тип события аналогичен фокусу focus, но отправляется до смещения фокуса и создает всплытия.

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

4.2.4.4 Тип события фокуса — focusout
Тип события фокуса focusout
Интерфейс FocusEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Window, Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : цель события потеряла фокус
UIEvent.view : Window
UIEvent.detail : 0
FocusEvent.relatedTarget : цель события, получающая фокус

Пользовательский агент ДОЛЖЕН отправить это событие, когда цель события теряет фокус. Этот тип события ДОЛЖЕН быть отправлен до того, как элемент потеряет фокус. Целью события ДОЛЖЕН быть элемент, который вот-вот потеряет фокус. Этот тип события похож на blur, но отправляется перед смещением фокуса и создает всплытия.

4.3 События мыши

Модуль событий мыши (Mouse Events) происходит от атрибутов [HTML401] onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove и onmouseout. Этот модуль событий специально разработан для использования с указательными устройствами ввода, такими как мышь или трекбол.

4.3.1 Интерфейс MouseEvent

Представлено в DOM Level 2, изменено в данной спецификации

Интерфейс MouseEvent предоставляет конкретную контекстную информацию, связанную с событиями Mouse.

В случае вложенных элементов события мыши всегда нацелены на самый глубоко вложенный элемент.

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

Чтобы создать экземпляр интерфейса MouseEvent, используйте конструктор MouseEvent, передавая дополнительный словарь MouseEventInit.

При инициализации объектов MouseEvent с использованием initMouseEvent реализации могут использовать клиентские координаты clientX и clientY для вычисления других координат (таких как целевые координаты, предоставляемые реализациями «DOM уровня 0″ или другими собственными атрибутами, например, pageX).

4.3.1.1 MouseEvent

[Constructor(DOMString type, optional MouseEventInit eventInitDict), Exposed=Window]
interface MouseEvent : UIEvent {
readonly attribute long screenX;
readonly attribute long screenY;
readonly attribute long clientX;
readonly attribute long clientY;

readonly attribute boolean ctrlKey;
readonly attribute boolean shiftKey;
readonly attribute boolean altKey;
readonly attribute boolean metaKey;

readonly attribute short button;
readonly attribute unsigned short buttons;

readonly attribute EventTarget? relatedTarget;

boolean getModifierState(DOMString keyArg);
};

screenX, of type long, readonly

Горизонтальная координата, в которой произошло событие, относительно начала системы координат экрана.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

screenY, of type long, readonly

Вертикальная координата, в которой произошло событие, относительно начала системы координат экрана.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

clientX, of type long, readonly

Горизонтальная координата, в которой произошло событие, относительно области просмотра, связанной с событием.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

clientY, of type long, readonly

Вертикальная координата, в которой произошло событие, относительно области просмотра, связанной с событием.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

ctrlKey, of type boolean, readonly

Обратитесь к атрибуту ctrlKey из KeyboardEvent.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

shiftKey, of type boolean, readonly

Обратитесь к атрибуту shiftKey из KeyboardEvent.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

altKey, of type boolean, readonly

Обратитесь к атрибуту altKey из KeyboardEvent.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

metaKey, of type boolean, readonly

Обратитесь к атрибуту metaKey из KeyboardEvent.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

button, of type short, readonly

Во время событий мыши, вызванных нажатием или отпусканием кнопки мыши, button ДОЛЖНА использоваться для указания того, какая кнопка указательного устройства изменила состояние.

Значение атрибута «button» ДОЛЖНО быть следующим:

  • Значение button «0» — НЕОБХОДИМО указать основную кнопку устройства (обычно левую кнопку или единственную кнопку на однокнопочных устройствах, используемых для активации управления пользовательским интерфейсом или выбора текста) или неинициализированное значение.
  • Значение button «1» — ДОЛЖНЫ указывать вспомогательную кнопку (в общем, среднюю кнопку, часто в сочетании с колесом мыши).
  • Значение button «2» — ДОЛЖЕН указывать дополнительную кнопку (обычно правую кнопку, часто используемую для отображения контекстного меню).
  • Значение button «3» — ДОЛЖЕН указывать кнопку X1 (назад).
  • Значение button «4» —  ДОЛЖЕН указывать кнопку Х2 (вперед).

Некоторые указывающие устройства предоставляют или имитируют больше состояний кнопок, и значения, больше 2 или ниже 0, МОГУТ использоваться для представления таких кнопок.

Значение button не обновляется для событий, не вызванных нажатием/отпусканием кнопки мыши. В этих случаях старайтесь не интерпретировать значение «0» как левую кнопку, а скорее как неинициализированное значение.

Некоторые действия по умолчанию, связанные с такими событиями, как mousedown и mouseup, зависят от конкретной используемой кнопки мыши.

Неинициализированное значение этого атрибута ДОЛЖНО быть «0«.

buttons, of type unsigned short, readonly

Во время любых событий мыши buttons ДОЛЖНЫ использоваться, чтобы указать, какая комбинация кнопок мыши в данный момент нажата, выраженная в виде битовой маски.

Несмотря на то, что имена для атрибута buttons и атрибута button имеют одинаковые имена, они очень разные. Предполагается, что значение button является допустимым во время обработчиков событий mousedown / mouseup, тогда как атрибут buttons отражает состояние кнопок мыши для любого доверенного объекта MouseEvent (пока он отправляется), поскольку он может представлять «нет активной кнопки в данный момент» состояние (0).

Значение атрибута buttons ДОЛЖНО быть следующим:

  • Значение buttons «0» — ДОЛЖЕН указывать, что ни одна кнопка в данный момент не активна.
  • Значение buttons «1» — ДОЛЖЕН указывать основную кнопку устройства (в общем, левую кнопку или единственную кнопку на однокнопочных устройствах, используемых для активации управления пользовательским интерфейсом или выбора текста).
  • Значение buttons «2» — ДОЛЖЕН указывать дополнительную кнопку (обычно правую кнопку, часто используемую для отображения контекстного меню), если она имеется.
  • Значение buttons «4» — ДОЛЖНЫ указывать вспомогательную кнопку (в общем, среднюю кнопку, часто в сочетании с колесом мыши).

Некоторые указательные устройства предоставляют или имитируют больше кнопок. Для представления таких кнопок значение ДОЛЖНО быть удвоено для каждой последующей кнопки (в двоичной серии 8, 16, 32, …).

Поскольку сумма любого набора значений кнопок является уникальным числом, автор контента может использовать побитовую операцию, чтобы определить, сколько кнопок нажимается в данный момент и какие они кнопки, для произвольного числа кнопок мыши на устройстве. Например, значение 3 указывает, что в данный момент нажаты левая и правая кнопки, а значение 5 указывает, что в данный момент нажаты левая и средняя кнопки.

Некоторые действия по умолчанию, связанные с такими событиями, как mousedown и mouseup, зависят от конкретной используемой кнопки мыши.

Неинициализированное значение этого атрибута ДОЛЖНО быть «0«.

relatedTarget, of type EventTarget, readonly, nullable

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

Неинициализированное значение этого атрибута ДОЛЖНО быть null.

getModifierState(keyArg)

Введено в эту спецификацию

Запрашивает состояние модификатора, используя значение ключа.

Возвращает true, если это ключ-модификатор и модификатор активирован, в противном случае — false.

  • DOMString keyArg — Обратитесь к методу getModifierState() KeyboardEvent для описания этого параметра.
4.3.1.2 MouseEventInit

dictionary MouseEventInit : EventModifierInit {
long screenX = 0;
long screenY = 0;
long clientX = 0;
long clientY = 0;

short button = 0;
unsigned short buttons = 0;
EventTarget? relatedTarget = null;
};

screenX, of type long, defaulting to 0

Инициализирует атрибут screenX объекта MouseEvent для требуемой горизонтальной относительной позиции указателя мыши на экране пользователя.

Инициализация объекта события в заданную позицию мыши не должна перемещать указатель мыши пользователя в инициализированную позицию.

screenY, of type long, defaulting to 0

Инициализирует атрибут screenY объекта MouseEvent для требуемой вертикальной относительной позиции указателя мыши на экране пользователя.

Инициализация объекта события в заданную позицию мыши не должна перемещать указатель мыши пользователя в инициализированную позицию.

clientX, of type long, defaulting to 0

Инициализирует атрибут clientX объекта MouseEvent для требуемой горизонтальной позиции указателя мыши относительно клиентского окна браузера пользователя.

Инициализация объекта события в заданную позицию мыши не должна перемещать указатель мыши пользователя в инициализированную позицию.

clientY, of type long, defaulting to 0

Инициализирует атрибут clientY объекта MouseEvent для требуемой вертикальной позиции указателя мыши относительно клиентского окна браузера пользователя.

Инициализация объекта события в заданную позицию мыши не должна перемещать указатель мыши пользователя в инициализированную позицию.

button, of type short, defaulting to 0

Инициализирует атрибут button объекта MouseEvent числом, представляющим желаемое состояние кнопки (кнопок) мыши.

Значение «0» используется для представления основной кнопки мыши, «1» — для представления вспомогательной / средней кнопки мыши, а «2» — для правой кнопки мыши. Числа больше 2 также возможны, но не указаны в этом документе.

buttons, of type unsigned short, defaulting to 0

Инициализирует атрибут buttons объекта MouseEvent числом, представляющим одну или несколько кнопок мыши, которые следует считать активными.

Атрибут buttons является битовым полем. Если значение маски равно «1«, когда применяется к значению битового поля, то основная кнопка мыши не работает. Если значение маски равно «2» при применении к значению битового поля, то правая кнопка мыши не работает. Если значение маски равно «4» при применении к значению битового поля, то вспомогательная / средняя кнопка не работает.

Пример № 5

В JavaScript для инициализации атрибута buttons, как если бы одновременно нажимались правая (2) и средняя кнопки (4), значение кнопок можно назначить либо:
{ buttons: 2 | 4 }
или:
{ buttons: 6 }

relatedTarget, of type EventTarget, nullable, defaulting to null

  • RelatedTarget следует инициализировать для элемента, который ограничивает указатель мыши слева (в случае события mouseover или mouseenter) или элемента, который ограничивает ввод указателя мыши (в случае события mouseout, mouseleave или focusout). Для других событий это значение не нужно присваивать (и по умолчанию будет null).

Реализации ДОЛЖНЫ поддерживать «текущий счетчик кликов» (current click count) при генерации событий мыши. Это ДОЛЖНО быть неотрицательным целым числом, указывающим количество последовательных нажатий кнопки указывающего устройства в течение определенного времени. Задержка, после которой счетчик сбрасывается, зависит от конфигурации среды.

4.3.2 Инициализаторы модификаторов событий

Интерфейсы MouseEvent и KeyboardEvent совместно используют набор атрибутов модификатора клавиатуры и поддерживают механизм получения дополнительных состояний модификатора. Следующий словарь позволяет авторам инициализировать атрибуты модификатора клавиатуры интерфейсов MouseEvent и KeyboardEvent, а также дополнительные состояния модификатора, запрашиваемые через getModifierState(). Шаги для построения событий с использованием этого словаря определены в разделе конструкторов событий.

dictionary EventModifierInit : UIEventInit {
boolean ctrlKey = false;
boolean shiftKey = false;
boolean altKey = false;
boolean metaKey = false;

boolean modifierAltGraph = false;
boolean modifierCapsLock = false;
boolean modifierFn = false;
boolean modifierFnLock = false;
boolean modifierHyper = false;
boolean modifierNumLock = false;
boolean modifierScrollLock = false;
boolean modifierSuper = false;
boolean modifierSymbol = false;
boolean modifierSymbolLock = false;
};

ctrlKey, of type boolean, defaulting to false

Инициализирует атрибут ctrlKey объектов MouseEvent или KeyboardEvent в значение true, если модификатор клавиши управления Control считается активным, в противном случае — значение false.

При значении true реализации также должны инициализировать состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Control, должны возвращать true.

shiftKey, of type boolean, defaulting to false

Инициализирует атрибут shiftKey объектов MouseEvent или KeyboardEvent в значение true, если модификатор клавиши Shift следует считать активным, в противном случае — значение false.

При значении true реализации также должны инициализировать состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Shift, должны возвращать true.

altKey, of type boolean, defaulting to false

Инициализирует атрибут altKey объектов MouseEvent или KeyboardEvent как true, если модификатор ключа Alt (альтернативный) (или Option) следует считать активным, в противном случае — false.

При значении true реализации также должны инициализировать состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Alt, должны возвращать true.

metaKey, of type boolean, defaulting to false

Инициализирует атрибут metaKey объектов MouseEvent или KeyboardEvent в значение true, если модификатор Meta key следует считать активным, в противном случае — значение false.

При значении true реализации также должны инициализировать состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный» при наличии либо параметра Meta должны возвращать true.

modifierAltGraph, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром AltGraph, должны возвращать true.

modifierCapsLock, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром CapsLock, должны возвращать true.

modifierFn, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Fn, должны возвращать true.

modifierFnLock, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром FnLock, должны возвращать true.

modifierHyper, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Hyper, должны возвращать true.

modifierNumLock, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром NumLock, должны возвращать true.

modifierScrollLock, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром ScrollLock, должны возвращать true.

modifierSuper, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Super, должны возвращать true.

modifierSymbol, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром Symbol, должны возвращать true.

modifierSymbolLock, of type boolean, defaulting to false

Инициализирует состояние ключевого модификатора объекта события, так что вызовы getModifierState() «мышиный» или getModifierState() «клавиатурный«, если они предоставляются с параметром SymbolLock, должны возвращать true.

4.3.3 Порядок событий мыши

Определенные события мыши, определенные в этой спецификации, ДОЛЖНЫ происходить в установленном порядке относительно друг друга. Ниже показана последовательность событий, которая ДОЛЖНА происходить, когда курсор указывающего устройства перемещается над элементом:

Номер Тип события Элемент Примечание
1 mousemove
Указательное устройство перемещено в элемент A …
2 mouseover А
3 mouseenter А
4 mousemove А Несколько событий mousemove
Указательное устройство перемещено из элемента А …
5 mouseout А
6 mouseleave А

Когда указывающее устройство перемещается в элемент A, а затем во вложенный элемент B и затем возвращается обратно, ДОЛЖНА произойти следующая последовательность событий:

Номер Тип события Элемент Примечание
1 mousemove
Указательное устройство перемещено в элемент A …
2 mouseover А
3 mouseenter А
4 mousemove А Несколько событий mousemove
Указательное устройство перемещено во вложенный элемент B …
5 mouseout А
6 mouseover В
7 mouseenter В
8 mousemove В Несколько событий mousemove
Указательное устройство перемещено из элемента B в A …
9 mouseout В
10 mouseleave В
11 mouseover А
12 mousemove А Несколько событий mousemove
Указательное устройство перемещено из элемента А …
13 mouseout А
14 mouseleave А

Иногда элементы могут быть визуально перекрыты с помощью CSS. В следующем примере три элемента, обозначенные A, B и C, имеют одинаковые размеры и абсолютное положение на веб-странице. Элемент C является дочерним по отношению к B, а B является дочерним по отношению к A в DOM:

Графическое представление трех уложенных друг на друга элементов, причем указательное устройство перемещается по стеку.
Графическое представление трех уложенных друг на друга элементов, причем указательное устройство перемещается по стеку.

Когда указательное устройство перемещается из-за пределов стека элементов в элемент, помеченный буквой C, а затем снова перемещается, ДОЛЖНА происходить следующая серия событий:

Номер Тип события Элемент Примечание
1 mousemove
Указательное устройство перемещено в элемент C, самый верхний элемент в стеке
2 mouseover С
3 mouseenter А
4 mouseenter В
5 mouseenter С
6 mousemove С Несколько событий mousemove
Указательное устройство перемещено из элемента C …
7 mouseout С
8 mouseleave С
9 mouseleave В
10 mouseleave А

События mouseover / mouseout срабатывают только один раз, а события mouseenter / mouseleave срабатывают три раза (один раз для каждого элемента).

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

Номер Тип события Элемент Примечание
1 mousedown
2 mousemove ДОПОЛНИТЕЛЬНО, несколько событий, некоторые ограничения
3 mouseup
4 click
5 mousemove ДОПОЛНИТЕЛЬНО, несколько событий, некоторые ограничения
6 mousedown
7 mousemove ДОПОЛНИТЕЛЬНО, несколько событий, некоторые ограничения
8 mouseup
9 click
10 dblclick

Время задержки, градус, расстояние и количество событий перемещения мышью mousemove, допустимые между событиями mousedown и mouseup при одновременном запуске события click или dblclick, будут зависеть от реализации, устройства и платформы. Этот допуск может помочь пользователям с физическими недостатками, такими как неустойчивые руки, когда эти пользователи взаимодействуют с указательным устройством.

Каждая реализация будет определять соответствующую толерантность к гистерезису (hysteresis), но в общем случае СЛЕДУЕТ запускать события click и dblclick, если целью событий связанных событий mousedown и mouseup является один и тот же элемент без вмешательства mouseout или mouseleave, и СЛЕДУЕТ запускать события click и dblclick для ближайшего общего включающего предка, когда связанные цели mousedown и mouseup различны.

Пример № 6

Если событие mousedown было нацелено на элемент тела документа HTML, и соответствующее событие mouseup было нацелено на корневой элемент, то событие click было отправлено на основе исходного корневого элемента, поскольку он является ближайшим общим включающим предком.

Если цель события (например, целевой элемент) удаляется из DOM во время последовательности событий мыши, оставшиеся события последовательности НЕ ДОЛЖНЫ запускаться на этом элементе.

Пример № 7

Если целевой элемент удаляется из DOM в результате события mousedown, никакие события для этого элемента не отправляются для mouseup, click или dblclick, а также никакие события активации по умолчанию. Однако событие mouseup будет по-прежнему отправляться на элемент, который открыт для мыши после удаления исходного целевого элемента. Точно так же, если целевой элемент удаляется из DOM во время отправки события mouseup, click и последующие события не отправляются.

4.3.4 Типы событий мыши (Mouse Event Types)

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

4.3.4.1 Тип события мыши auxclick
Тип события мыши auxclick
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Различное
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : указывает текущий счетчик кликов; значение атрибута ДОЛЖНО быть 1, когда пользователь начинает это действие, и увеличивается на 1 для каждого клика.
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : значение на основе текущей нажатой кнопки
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : null

Тип события auxclick ДОЛЖЕН быть отправлен на самую верхнюю цель события, обозначенную указателем, когда пользователь нажимает и отпускает кнопку неосновного указателя, или иным образом активирует указатель таким образом, который имитирует такое действие. Способ приведения в действие кнопки мыши зависит от устройства указателя и конфигурации среды, например, он МОЖЕТ зависеть от местоположения экрана или задержки между нажатием и отпусканием кнопки указательного устройства.

Событие auxclick должно запускаться только для неосновных кнопок указателя (т. е. когда значение кнопки button не равно «0«, значение buttons больше «1«). Основная кнопка (как и левая кнопка стандартной мыши) НЕ ДОЛЖНА запускать события auxclick. Смотрите click для соответствующего события, связанного с основной кнопкой.

Событию auxclick МОЖЕТ предшествовать события mousedown и mouseup на одном и том же элементе, независимо от изменений между другими типами узлов (например, текстовыми узлами). В зависимости от конфигурации среды, событие auxclick МОЖЕТ быть отправлено, если между нажатием и отпусканием кнопки указательного устройства происходит одно или несколько событий типа mouseover, mousemove и mouseout.

Действие по умолчанию для типа события auxclick варьируется в зависимости от цели события и значения атрибутов button или  buttons. Типичные действия по умолчанию для типа события auxclick следующие:

  • Если цель события имеет ассоциированное поведение активации, действие по умолчанию ДОЛЖНО состоять в том, чтобы выполнить это поведение активации (см. §3.5 Триггеры активации и поведение).

Пример № 8

Получение и обработка auxclick для средней кнопки.

myLink.addEventListener("auxclick", function(e) { if (e.button === 1) { // Это предотвратит поведение по умолчанию, например, открытие новой вкладки при среднем нажатии на ссылку.

e.preventDefault(); // Сделайте что-нибудь еще, чтобы обработать щелчок средней кнопкой, например, позаботиться об открытии ссылок или кнопок без ссылок в новых вкладках таким образом, чтобы это соответствовало приложению. Другие действия, такие как закрытие вкладки в полосе вкладок, которая должна выполняться при нажатии, также могут быть выполнены здесь. } });

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

Пример № 9

Получение и обработка auxlick для правой кнопки

myDiv.addEventListener("contextmenu", function(e) { // Этот вызов гарантирует, что никакое контекстное меню не показывается, чтобы помешать странице, получающей события.

e.preventDefault(); });

myDiv.addEventListener("auxclick", function(e) { if (e.button === 2) { // Сделайте что-нибудь еще, чтобы обработать щелчок правой кнопкой, например, открыть настроенное контекстное меню внутри приложения. } });

4.3.4.2 Тип события мыши click
Тип события мыши click
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Различное
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : указывает текущий счетчик кликов; значение атрибута ДОЛЖНО быть 1, когда пользователь начинает это действие, и увеличивается на 1 для каждого клика.
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : значение на основе текущей нажатой кнопки
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : null

Тип события click ДОЛЖЕН быть отправлен на верхнюю цель события, обозначенную указателем, когда пользователь нажимает и отпускает кнопку первичного указателя, или иным образом активирует указатель таким образом, который имитирует такое действие. Способ приведения в действие кнопки мыши зависит от устройства указателя и конфигурации среды, например, он МОЖЕТ зависеть от местоположения экрана или задержки между нажатием и отпусканием кнопки указательного устройства.

Событие click должно запускаться только для основной кнопки указателя (т. е. когда значение button равно 0, значение buttons равно 1). Вторичные кнопки (например, средняя или правая кнопка стандартной мыши) НЕ ДОЛЖНЫ вызывать события щелчка click. Смотрите auxclick для соответствующего события, связанного с неосновными кнопками.

Событию click МОЖЕТ предшествовать события mousedown и mouseup для одного и того же элемента, независимо от изменений между другими типами узлов (например, текстовыми узлами). В зависимости от конфигурации среды, событие click МОЖЕТ быть отправлено, если между нажатием и отпусканием кнопки указательного устройства происходит одно или несколько событий типа mouseover, mousemove и mouseout. Событие click МОЖЕТ также сопровождаться событием dblclick.

Пример № 10

Если пользователь вводит дочерний элемент текстового узла в элемент <p>, стилизованный с большой высотой строки, он слегка перемещает мышь, так что она больше не находится над областью, содержащей текст, но все еще находится внутри содержащего блока этот элемент <p> (т. е. указатель находится между строками одного и того же текстового блока, но не над текстовым узлом как таковым), а затем в последствии движения мыши вверх, это, скорее всего, будет вызывать событие click (если оно попадает в нормальный временной гистерезис за click), так как пользователь остался в рамках того же элемента. Обратите внимание, что генерируемые агентом пользователя события мыши не отправляются на текстовые узлы.


В дополнение к тому, что он связан с указательными устройствами, тип события click ДОЛЖЕН быть отправлен как часть активации элемента, как описано в §3.5 Триггеры активации и поведение.

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

Действие по умолчанию для типа события click зависит от цели события и значения атрибутов button или buttons. Типичные действия по умолчанию для типа события click  следующие:

  • Если цель события имеет ассоциированное поведение активации, действие по умолчанию ДОЛЖНО состоять в том, чтобы выполнить это поведение активации (см. §3.5 Триггеры активации и поведение).
  • Если цель события является фокусируемой, действие по умолчанию ДОЛЖНО состоять в том, чтобы придать этому элементу фокус документа.
4.3.4.3 Тип события мыши dblclick
Тип события мыши dblclick
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : указывает текущий счетчик кликов
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : значение на основе текущей нажатой кнопки
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : null

Пользовательский агент ДОЛЖЕН отправлять это событие, когда основная кнопка указательного устройства нажимается дважды над элементом. Определение двойного щелчка зависит от конфигурации среды, за исключением того, что цель события ДОЛЖНА быть одинаковой для mousedown, mouseup и dblclick. Этот тип события ДОЛЖЕН быть отправлен после типа события click, если щелчок и двойной щелчок происходят одновременно, и после события типа mouseup в противном случае.

Как и в случае события click, событие dblclick должно запускаться только для основной кнопки указателя. Вторичные кнопки НЕ ДОЛЖНЫ запускать события dblclick.

Отмена события click не влияет на запуск события dblclick.

Как и в случае с типом события click, действие по умолчанию для типа события dblclick варьируется в зависимости от цели события и значения атрибутов button или buttons. Обычно типичные действия по умолчанию для типа события dblclick совпадают с действиями для типа события click со следующим дополнительным поведением:

  • Если цель события выбирается, действием по умолчанию ДОЛЖНО быть выбор части или всего выбираемого контента. Последующие клики МОГУТ выбрать дополнительные выбираемые части этого контента.
4.3.4.4 Тип события мыши mousedown
Тип события мыши mousedown
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Зависит: начать операцию перетаскивания; начать выделение текста; начать взаимодействие прокрутки / панорамирования (в сочетании с средней кнопкой мыши, если поддерживается)
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : указывает на текущий счетчик кликов, увеличенный на единицу. Например, если до mousedown щелчка не было, detail будет содержать значение 1
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : значение на основе текущей нажатой кнопки
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : null

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

Многие реализации используют событие mousedown, чтобы начать множество контекстно-зависимых действий по умолчанию. Эти действия по умолчанию могут быть предотвращены, если это событие отменено. Некоторые из этих действий по умолчанию могут включать: начало взаимодействия перетаскивания с изображением или ссылкой, запуск выделения текста и т. д.. Кроме того, некоторые реализации предоставляют функцию панорамирования с помощью мыши, которая активируется при нажатии средней кнопки мыши во время событие mousedown отправлено.

4.3.4.5 Тип события мыши mouseenter
Тип события мыши mouseenter
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Element
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : 0
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : 0
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : указывает на цель события, с которой указывает указывающее устройство, если оно есть.

Пользовательский агент ДОЛЖЕН отправлять это событие, когда указывающее устройство перемещается на границы элемента или одного из его потомков. Пользовательский агент ДОЛЖЕН также отправлять это событие, когда элемент или один из его потомков перемещается под основное указательное устройство. Этот тип события аналогичен наведению мыши mouseover, но отличается тем, что он не всплывает, и НЕ ДОЛЖЕН отправляться, когда устройство-указатель перемещается от элемента к границам одного из его дочерних элементов.

Есть сходство между этим типом события и псевдоклассом CSS: hover [CSS2]. Смотрите также тип события mouseleave.

4.3.4.6 Тип события мыши mouseleave
Тип события мыши mouseleave
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Element
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : 0
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : 0
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : указывает на цель события, с которой указывает указывающее устройство, если оно есть.

Пользовательский агент ДОЛЖЕН отправлять это событие, когда указывающее устройство перемещается за пределы элемента и всех его потомков. Пользовательский агент ДОЛЖЕН также отправить это событие, когда элемент или один из его потомков переместятся, чтобы больше не находиться под основным указательным устройством. Этот тип события похож на указатель мыши mouseout, но отличается тем, что он не всплывает, и его НЕ ДОЛЖНО отправлять до тех пор, пока указывающее устройство не покинет границы элемента и границы всех его дочерних элементов.

Есть сходство между этим типом события и псевдоклассом CSS: hover [CSS2]. Смотрите также тип события mouseenter.

 

4.3.4.7 Тип события мыши mousemove
Тип события мыши mousemove
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : 0
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : 0
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : null

Пользовательский агент ДОЛЖЕН отправлять это событие, когда указывающее устройство перемещается, когда оно находится над элементом. Частота событий при перемещении указательного устройства зависит от реализации, устройства и платформы, но для последовательного перемещения mousemove указателя-устройства СЛЕДУЕТ запускать несколько последовательных событий перемещения мыши mousemove, а не одно событие для каждого случая движения мыши. Реализациям рекомендуется определить оптимальную частоту, чтобы сбалансировать скорость реакции и производительность.

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

Ранее это событие указывалось как не подлежащее отмене в событиях DOM Level 2 [DOM-Level-2-Events], но оно было изменено, чтобы отразить существующее взаимодействие между пользовательскими агентами.

4.3.4.8 Тип события мыши mouseout
Тип события мыши mouseout
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : 0
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : 0
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : указывает на событие, на которое указывает указывающее устройство, если оно есть.

Пользовательский агент ДОЛЖЕН отправлять это событие, когда указывающее устройство перемещается за пределы элемента или когда элемент перемещается так, чтобы больше не находиться под основным указательным устройством. Этот тип события похож на mouseleave, но отличается тем, что он всплывает, и он ДОЛЖЕН отправляться, когда устройство-указатель перемещается от элемента к границам одного из его потомков.

  • Смотрите также тип события наведения мыши — mouseover
4.3.4.9 Тип события мыши mouseover
Тип события мыши mouseover
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : 0
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : 0
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : указывает на событие, на которое указывает указывающее устройство, если оно есть.

Пользовательский агент ДОЛЖЕН отправлять это событие, когда указывающее устройство перемещается на границы элемента или когда элемент перемещается под основное указательное устройство. Этот тип события аналогичен mouseenter, но отличается тем, что он всплывает и должен отправляться, когда устройство указателя перемещается на границы элемента, чей элемент-предок является целью события для того же экземпляра прослушивателя событий.

Смотрите также тип события mouseout.

4.3.4.10 Тип события мыши mouseup
Тип события мыши mouseup
Интерфейс MouseEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Вызвать контекстное меню (в сочетании с правой кнопкой мыши, если поддерживается)
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : указывает на текущий счетчик кликов, увеличенный на единицу.
MouseEvent.screenX : значение, основанное на положении указателя на экране
MouseEvent.screenY : значение, основанное на положении указателя на экране
MouseEvent.clientX : значение основано на позиции указателя в области просмотра
MouseEvent.clientY : значение основано на позиции указателя в области просмотра
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : значение на основе текущей нажатой кнопки
MouseEvent.buttons : значение основано на всех нажатых в данный момент кнопках, 0, если не нажата ни одна
MouseEvent.relatedTarget : null

Пользовательский агент ДОЛЖЕН послать это событие, когда кнопка указательного устройства отпущена над элементом.

Многие реализации будут вызывать контекстное меню как действие по умолчанию для этого события, если вы отпускаете правую кнопку мыши.

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

4.4 События колеса

Колеса — это устройства, которые могут вращаться в одном или нескольких пространственных измерениях и которые могут быть связаны с указательным устройством. Система координат зависит от конфигурации среды.

Пример № 11

Пользовательская среда может быть настроена таким образом, чтобы вертикальная прокрутка ассоциировалась с вращением вдоль оси y, горизонтальная прокрутка с вращением вдоль оси x и масштабирование с вращением вдоль оси z.

Атрибуты deltaX, deltaY и deltaZ объектов WheelEvent указывают измерение вдоль их соответствующих осей в единицах пикселей, линий или страниц. Указанные результаты измерений предоставляются после того, как алгоритм, зависящий от среды, преобразует фактическое вращение / перемещение колесного устройства в соответствующие значения и единицы.

Пользовательские параметры среды могут быть настроены для интерпретации фактического вращения / движения колесного устройства различными способами. Одно движение обычного зубчатого колеса мыши может привести к измерению 162 пикселей (162 — это просто примерное значение, фактические значения могут зависеть от текущих размеров экрана пользовательского агента). Но пользователь может изменить настройки среды по умолчанию, чтобы ускорить свое колесо мыши, увеличив это число. Кроме того, некоторые программы колесика мыши могут поддерживать ускорение (чем быстрее вращается / перемещается колесо, тем больше дельта каждого измерения) или даже измерения поворота на подпикселях. Из-за этого авторы не могут предполагать, что заданная величина ротации в одном пользовательском агенте даст одинаковое значение разницы во всех пользовательских агентах.

Знак (положительный или отрицательный) значений атрибутов deltaX, deltaY и deltaZ ДОЛЖЕН быть согласованным между несколькими отправками события колеса, в то время как движение фактического устройства колеса вращается / движется в одном и том же направлении. Если пользовательский агент прокручивает в качестве действия по умолчанию для события колеса, то знак дельты ДОЛЖЕН быть задан правой системой координат, где положительные оси X, Y и Z направлены в направлении самого правого края, самого нижнего край и самая дальняя глубина (от пользователя) документа, соответственно.

Отдельные пользовательские агенты могут (в зависимости от их среды и конфигурации оборудования) по-разному интерпретировать одно и то же физическое взаимодействие с пользователем на колесе. Например, вертикальное движение по краю трекпада сверху вниз может быть интерпретировано как действие колеса, предназначенное либо для прокрутки страницы вниз, либо для перемещения страницы вверх (т. е. приводит к положительному или отрицательному значению deltaY соответственно).

4.4.1 Интерфейс WheelEvent

Введено в эту спецификацию.

Интерфейс WheelEvent предоставляет конкретную контекстную информацию, связанную с событиями колеса.

Чтобы создать экземпляр интерфейса WheelEvent, используйте конструктор WheelEvent, передавая дополнительный словарь WheelEventInit.

4.4.1.1 WheelEvent

[Constructor(DOMString type, optional WheelEventInit eventInitDict), Exposed=Window]
interface WheelEvent : MouseEvent {
// DeltaModeCode
const unsigned long DOM_DELTA_PIXEL = 0x00;
const unsigned long DOM_DELTA_LINE = 0x01;
const unsigned long DOM_DELTA_PAGE = 0x02;

readonly attribute double deltaX;
readonly attribute double deltaY;
readonly attribute double deltaZ;
readonly attribute unsigned long deltaMode;
};

DOM_DELTA_PIXEL

Единицами измерения для дельты ДОЛЖНЫ быть пиксели. Это наиболее типичный случай в большинстве операционных систем и конфигураций реализации.

DOM_DELTA_LINE

Единицами измерения для дельты ДОЛЖНЫ быть отдельные строки текста. Это относится ко многим элементам управления формой.

DOM_DELTA_PAGE

Единицами измерения для дельты ДОЛЖНЫ быть страницы, определенные как один экран или как разграниченная страница.

deltaX, of type double, readonly

В пользовательских агентах, где действием по умолчанию для события wheel является прокрутка, значение ДОЛЖНО быть измерением вдоль оси x (в пикселях, строках или страницах), которое необходимо прокрутить в случае, когда событие не отменено. В противном случае это измерение, зависящее от реализации (в пикселях, строках или страницах) движения колесного устройства вокруг оси x.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.0.

deltaY, of type double, readonly

В пользовательских агентах, где действием по умолчанию для события wheel является прокрутка, значение ДОЛЖНО быть измерением вдоль оси y (в пикселях, строках или страницах), которое необходимо прокрутить в случае, когда событие не отменено. В противном случае это измерение, зависящее от реализации (в пикселях, строках или страницах) перемещения колесного устройства вокруг оси y.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.0.

deltaZ, of type double, readonly

В пользовательских агентах, где действием по умолчанию для события wheel является прокрутка, значение ДОЛЖНО быть измерением вдоль оси z (в пикселях, строках или страницах), которое необходимо прокрутить в случае, когда событие не отменено. В противном случае это измерение, зависящее от реализации (в пикселях, строках или страницах) перемещения колесного устройства вокруг оси z.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.0.

deltaMode, of type unsigned long, readonly

Атрибут deltaMode содержит указание единиц измерения для значений дельты. Значением по умолчанию является DOM_DELTA_PIXEL (в пикселях).

Этот атрибут ДОЛЖЕН быть установлен в одну из констант DOM_DELTA, чтобы указывать единицы измерения для дельта-значений. Точное измерение зависит от устройства, операционной системы и конфигурации приложения.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

4.4.1.2 WheelEventInit

dictionary WheelEventInit : MouseEventInit {
double deltaX = 0.0;
double deltaY = 0.0;
double deltaZ = 0.0;
unsigned long deltaMode = 0;
};

deltaX, of type double, defaulting to 0.0

Смотрите атрибут deltaZ.

deltaY, of type double, defaulting to 0.0

Смотрите атрибут deltaZ.

deltaZ, of type double, defaulting to 0.0

Инициализирует атрибут deltaZ объекта WheelEvent. Относительные положительные значения для этого атрибута (а также атрибуты deltaX и deltaY) задаются правой системой координат, где оси X, Y и Z направлены к самому правому краю, самому нижнему краю и самая дальняя (от пользователя) глубина документа, соответственно. Отрицательные относительные значения находятся в соответствующих противоположных направлениях.

deltaMode, of type unsigned long, defaulting to 0

Инициализирует атрибут deltaMode объекта WheelEvent для перечисляемых значений 0, 1 или 2, которые представляют количество прокручиваемых пикселей (DOM_DELTA_PIXEL), прокручиваемых строк (DOM_DELTA_LINE) или прокручиваемых страниц (DOM_DELTA_PAGE), если вращение колеса привело к прокрутке.

4.4.2 Типы колесных событий

4.4.2.1 Тип колёсного события wheel
Тип колёсного события wheel
Интерфейс WheelEvent
Синх / Асин Асинхронный
Всплытие Да
Надежные цели Element
Отменяемый Различные варианты
Сдержанный Да
Действие по умолчанию Прокрутить (или увеличить) документ
Контекст (доверенные события) Event.target : самая верхняя цель события
UIEvent.view : Window
UIEvent.detail : 0
MouseEvent.screenX : если колесо связано с указательным устройством, значение основывается на положении указателя на экране, в противном случае 0
MouseEvent.screenY : если колесо связано с указательным устройством, значение основывается на положении указателя на экране, в противном случае 0
MouseEvent.clientX : если колесо связано с указательным устройством, значение основывается на положении указателя в области просмотра, в противном случае 0
MouseEvent.clientY : если колесо связано с указательным устройством, значение основывается на положении указателя в области просмотра, в противном случае 0
MouseEvent.altKey : true, если модификатор Alt был активен, иначе false
MouseEvent.ctrlKey : true, если модификатор Control был активен, иначе false
MouseEvent.shiftKey : true, если модификатор Shift был активен, иначе false
MouseEvent.metaKey : true, если Meta-модификатор был активен, иначе false
MouseEvent.button : если колесо связано с указательным устройством, значение зависит от нажатой текущей кнопки, в противном случае 0
MouseEvent.buttons : если колесо связано с указательным устройством, значение на основе нажатия всех кнопок в данный момент, 0, если ни одна кнопка не нажата
MouseEvent.relatedTarget : указывает на цель события, на которую указывает указывающее устройство, если таковое имеется
WheelEvent.deltaX : ожидаемое количество, которое страница будет прокручивать вдоль оси x согласно единицам deltaMode; или зависящее от реализации значение движения колеса вокруг оси x
WheelEvent.deltaY : ожидаемое количество, которое страница будет прокручивать вдоль оси y в соответствии с единицами измерения deltaMode; или зависящее от реализации значение движения колеса вокруг оси y
WheelEvent.deltaZ : ожидаемое количество, которое страница будет прокручивать вдоль оси z в соответствии с единицами измерения deltaMode; или зависящее от реализации значение движения колеса вокруг оси z
WheelEvent.deltaMode : индикатор единиц измерения (пиксели, строки или страницы) для атрибутов deltaX, deltaY и deltaZ

Пользовательский агент ДОЛЖЕН отправлять это событие, когда колесо мыши вращается вокруг какой-либо оси, или когда эквивалентное устройство ввода (например, шарик мыши, определенные планшеты или сенсорные панели и т. д.) Эмулирует такое действие. В зависимости от платформы и устройства ввода, диагональные дельты колеса МОГУТ быть доставлены либо как одно событие «колеса» wheel с несколькими ненулевыми осями, либо как отдельные события «колеса» wheel для каждой ненулевой оси.

Типичным действием по умолчанию для типа события «wheel» является прокрутка (или, в некоторых случаях, масштабирование) документа на указанное количество. Если это событие отменено, реализация НЕ ДОЛЖНА прокручивать или масштабировать документ (или выполнять какие-либо другие специфические для реализации действия по умолчанию, связанные с этим типом события).

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

4.4.2.2 Отменяемость событий колеса

Вызов «preventDefault» для события колеса может предотвратить или иным образом прервать прокрутку. Для максимальной производительности прокрутки, пользовательский агент может не ждать каждого события колеса, связанного с прокруткой, для обработки, чтобы увидеть, будет ли оно отменено. В таких случаях возможно, что отменяется только событие первого колеса в последовательности прокрутки. Для остальных событий колеса пользовательский агент должен установить для своего свойства «cancelable» значение «false».

4.5 Вводимые события (Input Events)

События ввода отправляются в виде уведомлений всякий раз, когда DOM обновляется (или собирается обновляться), как прямой результат действия пользователя (например, ввод с клавиатуры в редактируемой области, удаление или форматирование текста, …).

4.5.1 Интерфейс InputEvent

4.5.1.1 InputEvent

Представлено в DOM Level 3

[Constructor(DOMString type, optional InputEventInit eventInitDict), Exposed=Window]
interface InputEvent : UIEvent {
readonly attribute DOMString? data;
readonly attribute boolean isComposing;
readonly attribute DOMString inputType;
};

data, of type DOMString, readonly, nullable

data содержит значение символов, сгенерированных методом ввода. Это МОЖЕТ быть одним символом Unicode или непустой последовательностью символов Unicode [Unicode]. Символы ДОЛЖНЫ быть нормализованы, как определено формой нормализации Unicode NFC, определенной в [UAX15]. Этот атрибут МОЖЕТ содержать пустую строку.

Неинициализированное значение этого атрибута ДОЛЖНО быть null.

isComposing, of type boolean, readonly

Значение true, если входное событие происходит как часть сеанса композиции, то есть после события композиции начала compositionstart и перед соответствующим событием композиции конца compositionend.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

inputType, of type DOMString, readonly

inputType содержит строку, которая идентифицирует тип ввода, связанного с событием.

Список допустимых значений для этого атрибута см. В спецификации [Input-Events].

Неинициализированное значение этого атрибута ДОЛЖНО быть пустой строкой «».

4.5.1.2 InputEventInit

dictionary InputEventInit : UIEventInit {
DOMString? data = "";
boolean isComposing = false;
DOMString inputType = "";
};

data, of type DOMString, nullable, defaulting to ""

Инициализирует атрибут данных data объекта InputEvent.

isComposing, of type boolean, defaulting to false

Инициализирует атрибут isComposing объекта InputEvent.

inputType, of type DOMString, defaulting to ""

Инициализирует атрибут inputType объекта InputEvent.

4.5.2 Порядок событий ввода

События ввода, определенные в этой спецификации, ДОЛЖНЫ происходить в установленном порядке относительно друг друга.

Номер Тип события Примечание
1 beforeinput
Элемент DOM обновлен
2 input

4.5.3 Типы событий ввода — интерфейс InputEvent

4.5.3.1 Тип вводного события — beforeinput
Тип события мыши beforeinput
Интерфейс InputEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element (в частности: типы элементов управления, такие как HTMLInputElement и т. д.) Или любой Element с включенным атрибутом «contenteditable»
Отменяемый Да
Сдержанный Да
Действие по умолчанию Обновление элемента DOM
Контекст (доверенные события) Event.target : цель события, которая должна быть обновлена
UIEvent.view : Window
UIEvent.detail : 0
InputEvent.data : строка, содержащая данные, которые будут добавлены к элементу, которые МОГУТ быть null, если содержимое будет удалено
InputEvent.isComposing : Значение true, если это событие отправляется во время последовательности мертвых клавиш (dead key) или во время работы редактора метода ввода (так что отправляются события композиции); false в противном случае.

Пользовательский агент ДОЛЖЕН отправить это событие, когда DOM будет обновлен.

4.5.3.2 Тип вводного события — input
Тип события мыши input
Интерфейс InputEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element (в частности: типы элементов управления, такие как HTMLInputElement и т. д.) Или любой Element с включенным атрибутом «contenteditable»
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не назначено
Контекст (доверенные события) Event.target : цель события, которая была только что обновлена
UIEvent.view : Window
UIEvent.detail : 0
InputEvent.data : строка, содержащая данные, которые были добавлены к элементу, которая МОЖЕТ быть пустой строкой, если содержимое было удалено
InputEvent.isComposing : Значение true, если это событие отправляется во время последовательности мертвых клавиш (dead key) или во время работы редактора метода ввода (так что отправляются события композиции); false в противном случае.

Пользовательский агент ДОЛЖЕН отправить это событие сразу же после обновления DOM.

4.6 События клавиатуры

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

События клавиатуры — это всего лишь один из способов предоставления текстового ввода. Для редактирования сценариев рассмотрите возможность использования InputEvent в качестве альтернативы (или в дополнение к) событиям клавиатуры.

4.6.1 Интерфейс KeyboardEvent

Введено в эту спецификацию

Интерфейс KeyboardEvent предоставляет определенную контекстную информацию, связанную с клавиатурными устройствами. Каждое событие клавиатуры ссылается на клавишу, используя значение. События клавиатуры обычно направлены на элемент, который имеет фокус.

Интерфейс KeyboardEvent предоставляет удобные атрибуты для некоторых распространенных клавиш-модификаторов: ctrlKey, shiftKey, altKey, metaKey. Эти атрибуты эквивалентны использованию метода getModifierState() с Control, Shift, Alt или Meta соответственно.

Чтобы создать экземпляр интерфейса KeyboardEvent, используйте конструктор KeyboardEvent, передавая дополнительный словарь KeyboardEventInit.

4.6.1.1 KeyboardEvent

[Constructor(DOMString type, optional KeyboardEventInit eventInitDict), Exposed=Window]
interface KeyboardEvent : UIEvent {
// KeyLocationCode
const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;
const unsigned long DOM_KEY_LOCATION_RIGHT = 0x02;
const unsigned long DOM_KEY_LOCATION_NUMPAD = 0x03;

readonly attribute DOMString key;
readonly attribute DOMString code;
readonly attribute unsigned long location;

readonly attribute boolean ctrlKey;
readonly attribute boolean shiftKey;
readonly attribute boolean altKey;
readonly attribute boolean metaKey;

readonly attribute boolean repeat;
readonly attribute boolean isComposing;

boolean getModifierState(DOMString keyArg);
};

DOM_KEY_LOCATION_STANDARD

Активация клавиши НЕ ДОЛЖНА различаться как левая или правая версия клавиши, и (кроме клавиши NumLock) не исходила с цифровой клавиатуры (или не создавалась с виртуальной клавишей, соответствующей цифровой клавиатуре).

Пример № 12

Клавиша Q на клавиатуре ПК 101 Key США.
Клавиша NumLock на клавиатуре ПК 101 Key США.
Клавиша 1 на клавиатуре ПК 101 Клавиша US, расположенная в основной части клавиатуры.

DOM_KEY_LOCATION_LEFT

Активированный ключ возник из левого расположения ключа (когда для этого ключа имеется несколько возможных положений).

Пример № 13

Левая клавиша Control на клавиатуре ПК 101 Key США.

DOM_KEY_LOCATION_RIGHT

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

Пример № 14

Правая клавиша Shift на клавиатуре PC 101 Key.

DOM_KEY_LOCATION_NUMPAD

Активация клавиши происходит с цифровой клавиатуры или с виртуальной клавиши, соответствующей цифровой клавиатуре (когда для этой клавиши имеется несколько возможных положений). Обратите внимание, что ключ NumLock всегда должен кодироваться с местоположением DOM_KEY_LOCATION_STANDARD.

Пример № 15

Клавиша 1 на клавиатуре ПК 101 Клавиша US, расположенная на цифровой клавиатуре.

key, of type DOMString, readonly

«key» содержит значение атрибута клавиши, соответствующее нажатой клавише.

Атрибут key не связан с устаревшим атрибутом keyCode и не имеет того же набора значений.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть «» (пустая строка).

code, of type DOMString, readonly

«code» содержит строку, которая идентифицирует физическую нажатую клавишу. На значение не влияет текущая раскладка клавиатуры или состояние модификатора, поэтому конкретная клавиша всегда будет возвращать одно и то же значение.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть «» (пустая строка).

location, of type unsigned long, readonly

Атрибут location содержит указание на логическое расположение ключа на устройстве.

Этот атрибут ДОЛЖЕН быть установлен в одну из констант DOM_KEY_LOCATION, чтобы указать местоположение ключа на устройстве.

Если пользовательский агент разрешает переназначение ключей, то значение местоположения location для переназначенного ключа ДОЛЖНО быть установлено на значение, соответствующее новому ключу. Например, если ключ «ControlLeft» сопоставлен с ключом «KeyQ», то атрибут местоположения ДОЛЖЕН быть установлен в DOM_KEY_LOCATION_STANDARD. И наоборот, если ключ «KeyQ» переназначен на одну из клавиш управления, тогда атрибут местоположения location ДОЛЖЕН быть установлен либо в DOM_KEY_LOCATION_LEFT, либо в DOM_KEY_LOCATION_RIGHT.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

ctrlKey, of type boolean, readonly

Значение true, если модификатор клавиши Control (control) был активен.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

shiftKey, of type boolean, readonly

Значение true, если модификатор клавиши Shift (Shift) был активен.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

altKey, of type boolean, readonly

Значение true, если модификатор ключа Alt (альтернативный) (или «Option») был активен.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

metaKey, of type boolean, readonly

Значение true, если модификатор Meta (мета) ключа был активен.

Модификатор ключа «Command» («⌘») в системах Macintosh представлен с использованием этого модификатора ключа.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

repeat, of type boolean, readonly

«true», если клавиша была нажата длительным образом. Удержание клавиши ДОЛЖНО приводить к повторению событий «нажатие клавиши» keydown, «перед входом» beforeinput, «ввод» input в этом порядке со скоростью, определяемой конфигурацией системы. Для мобильных устройств, которые имеют поведение при нажатии длинной клавиши, первое событие клавиши со значением атрибута «repeat», равным «true», ДОЛЖНО служить указанием на нажатие длинной клавиши. Время, в течение которого клавиша ДОЛЖНА быть нажата, чтобы начать повторение, зависит от конфигурации.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

isComposing, of type boolean, readonly

«true«, если ключевое событие происходит как часть сеанса композиции, то есть после события compositionstart и перед соответствующим событием compositionend.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть false.

getModifierState(keyArg)

Запрашивает состояние модификатора, используя значение ключа.
Возвращает true, если это ключ-модификатор и модификатор активирован, в противном случае — false.

DOMString keyArg

  • Значение ключа модификатора. Допустимые ключи-модификаторы определены в таблице «Ключи-модификаторы» в [UIEvents-Key].
  • Если приложение желает различить правый и левый модификаторы, эта информация может быть выведена с использованием событий клавиатуры и местоположения.
4.6.1.2 KeyboardEventInit

dictionary KeyboardEventInit : EventModifierInit {
DOMString key = "";
DOMString code = "";
unsigned long location = 0;
boolean repeat = false;
boolean isComposing = false;
};

key, of type DOMString, defaulting to ""

Инициализирует атрибут key объекта KeyboardEvent для строки символов Юникода, представляющей значение клавиши, после учета всех модификаторов клавиатуры (например, Shift-State). Это значение является окончательным действующим значением клавиши. Если ключ не является печатаемым символом, то это должно быть одно из значений ключа, определенных в [UIEvents-Key].

code, of type DOMString, defaulting to ""

Инициализирует атрибут code объекта KeyboardEvent для строки символов Юникода, представляющей нажатую клавишу, игнорируя любые модификации клавиатуры, такие как раскладка клавиатуры. Это значение должно быть одним из значений кода, определенных в [UIEvents-Code]].

location, of type unsigned long, defaulting to 0

Инициализирует атрибут местоположения location объекта KeyboardEvent для одной из следующих числовых констант местоположения:

  • DOM_KEY_LOCATION_STANDARD (числовое значение 0)
  • DOM_KEY_LOCATION_LEFT (числовое значение 1)
  • DOM_KEY_LOCATION_RIGHT (числовое значение 2)
  • DOM_KEY_LOCATION_NUMPAD (числовое значение 3)

repeat, of type boolean, defaulting to false

Инициализирует атрибут повтора repeat объекта KeyboardEvent. Этот атрибут должен быть установлен в true, если текущий KeyboardEvent считается частью повторяющейся последовательности похожих событий, вызванных длительным нажатием какой-либо одной клавиши, в противном случае — false.

isComposing, of type boolean, defaulting to false

Инициализирует атрибут isComposing объекта KeyboardEvent. Этот атрибут должен иметь значение true, если создаваемое событие происходит как часть последовательности композиции, в противном случае — false.


Устаревшие реализации событий клавиатуры включают в себя три дополнительных атрибута: keyCode, charCode и which. Атрибут keyCode указывает числовое значение, связанное с определенной клавишей на клавиатуре компьютера, в то время как атрибут charCode указывает значение ASCII символа, связанного с этой клавишей (которое может совпадать со значением keyCode), и применяется только к клавишам, которые производят символьное значение.

На практике keyCode и charCode несовместимы на разных платформах и даже в одной и той же реализации в разных операционных системах или с использованием разных локализаций. Эта спецификация не определяет значения ни для keyCode или charCode, ни для поведения charCode. В соответствующих реализациях событий пользовательского интерфейса авторы контента могут вместо этого использовать ключ key и код code.

Для получения дополнительной информации см. Информационное приложение об атрибутах ключа Legacy.

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

В некоторых реализациях или конфигурациях системы некоторые ключевые события или их значения могут подавляться используемым IME.

4.6.2 Расположение клавиш событий клавиатуры

Атрибут location может использоваться для устранения неоднозначности между значениями клавиш, которые могут быть сгенерированы различными физическими клавишами на клавиатуре, например, клавишей Shift влево и вправо или «клавишами со стрелками» и «клавишами со стрелками с цифрами» (когда NumLock выключен).

В следующей таблице определены допустимые значения местоположения location для специальных клавиш, которые имеют более одного местоположения на клавиатуре:

KeyboardEvent . key Допустимые значения location
«Shift», «Control», «Alt», «Meta» DOM_KEY_LOCATION_LEFT
DOM_KEY_LOCATION_RIGHT
«ArrowDown», «ArrowLeft», «ArrowRight», «ArrowUp» DOM_KEY_LOCATION_STANDARD
DOM_KEY_LOCATION_NUMPAD
«End», «Home», «PageDown», «PageUp» DOM_KEY_LOCATION_STANDARD
DOM_KEY_LOCATION_NUMPAD
«0», «1», «2», «2», «4», «5», «6», «7», «8», «9», «.», «Enter», «+», «-«, «*», «/» DOM_KEY_LOCATION_STANDARD
DOM_KEY_LOCATION_NUMPAD

Для всех других ключей, не перечисленных в этой таблице, атрибут location ДОЛЖЕН всегда иметь значение DOM_KEY_LOCATION_STANDARD.

4.6.3 Порядок событий клавиатуры

События клавиатуры, определенные в этой спецификации, происходят в установленном порядке относительно друг друга для любой данной клавиши:

Номер Тип события Примечание
1 keydown
2 beforeinput (только для клавиш, которые выдают символьное значение)
Любые действия по умолчанию, связанные с этой клавишей, такие как вставка символа в DOM.
3 input (только для клавиш, которые обновили DOM)
Любые события в результате удержания клавиши в течение длительного периода (см. Ниже).
4 keyup

Если клавиша нажата в течение длительного периода, следующие события МОГУТ повторяться с частотой, зависящей от окружающей среды:

Номер Тип события Примечание
1 keydown (с атрибутом repeat, установленным в true)
2 beforeinput (только для клавиш, которые выдают символьное значение)
Любые действия по умолчанию, связанные с этой клавишей, такие как вставка символа в DOM.
3 input (только для клавиш, которые обновили DOM)

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

Цель события ключевого события — это фокусированный в данный момент элемент, который обрабатывает действия клавиатуры. Часто это HTML-элемент ввода input или текстовый элемент, который можно редактировать, но МОЖЕТ быть элементом, определяемым основным языком, чтобы принимать ввод с клавиатуры для нетекстовых целей, таких как активация клавиши ускорения или запуск другого поведения. Если в фокусе нет подходящего элемента, целью события будет элемент тела HTML, если он доступен, в противном случае — корневой элемент.

Цель события может меняться между различными ключевыми событиями. Например, событие keydown для клавиши Tab, вероятно, будет иметь цель, отличную от события keyup при том же нажатии клавиши.

4.6.4 Типы событий клавиатуры

4.6.4.1 Тип события клавиатуры — keydown
Тип события клавиатуры keydown
Интерфейс KeyboardEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Варьируется: события «перед входом» beforeinput и «вход» input; запустить систему компоновки текста; blur и focus события; событие «нажатия клавиши» keypress  (если поддерживается); активационное поведение; другое событие
Контекст (доверенные события) Event.target : фокусируемый элемент, обрабатывающий ключевое событие, или если элемент не сфокусирован, то элемент body, если доступен, в противном случае корневой элемент
UIEvent.view : Window
UIEvent.detail : 0
KeyboardEvent.key : значение ключа нажатой клавиши.
KeyboardEvent.code : значение кода, связанное с физическим расположением клавиши на клавиатуре.
KeyboardEvent.location : расположение ключа на устройстве.
KeyboardEvent.altKey : true, если модификатор Alt был активен, иначе false
KeyboardEvent.shiftKey : true, если модификатор Shift был активен, иначе false
KeyboardEvent.ctrlKey : true, если модификатор Control был активен, иначе false
KeyboardEvent.metaKey : true, если Meta-модификатор был активен, иначе false
KeyboardEvent.repeat : true, если клавиша была нажата достаточно долго, чтобы вызвать ее повторение, иначе false
KeyboardEvent.isComposing : true, если ключевое событие происходит как часть сеанса композиции, иначе false

Пользовательский агент ДОЛЖЕН отправить это событие, когда нажата клавиша. Тип события keydown зависит от устройства и зависит от возможностей устройств ввода и их отображения в операционной системе. Этот тип события ДОЛЖЕН быть сгенерирован после сопоставления клавиш. Этот тип события ДОЛЖЕН быть отправлен до событий beforeinput, input и keyup, связанных с одним и тем же ключом.

Действие по умолчанию для события keydown зависит от ключа:

  • Если ключ связан с символом, действие по умолчанию ДОЛЖНО состоять в том, чтобы отправить событие beforeinput, за которым следует событие input. В случае, когда ключ, который связан с несколькими символами (например, с макросом или определенными последовательностями мертвых клавиш), действием по умолчанию ДОЛЖНО быть отправка одного набора событий beforeinput / input для каждого символа
  • Если ключ связан с системой компоновки текста, действие по умолчанию ДОЛЖНО состоять в том, чтобы запустить эту систему
  • Если клавиша является клавишей Tab, действие по умолчанию ДОЛЖНО состоять в том, чтобы сместить фокус документа с текущего в фокусе элемента (если он есть) на новый фокусированный элемент, как описано в «Типах событий фокуса»
  • Если ключом является Enter или » » клавиша, а текущий фокус находится на элементе, изменяющем состояние, действие по умолчанию ДОЛЖНО быть отправлять событие click и событие DOMActivate, если этот тип события поддерживается агентом пользователя (см. §3.5 Триггеры активации и поведение для более подробной информации)

Если это событие отменено, связанные типы событий НЕ ДОЛЖНЫ отправляться, и связанные действия НЕ ДОЛЖНЫ выполняться.

События keydown и keyup традиционно связаны с обнаружением любой клавиши, а не только той, которая дает значение символа.

4.6.4.2 Тип события клавиатуры — keyup
Тип события клавиатуры keyup
Интерфейс KeyboardEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : фокусируемый элемент, обрабатывающий ключевое событие, или если элемент не сфокусирован, то элемент body, если доступен, в противном случае корневой элемент
UIEvent.view : Window
UIEvent.detail : 0
KeyboardEvent.key : значение ключа нажатой клавиши.
KeyboardEvent.code : значение кода, связанное с физическим расположением клавиши на клавиатуре.
KeyboardEvent.location : расположение ключа на устройстве.
KeyboardEvent.altKey : true, если модификатор Alt был активен, иначе false
KeyboardEvent.shiftKey : true, если модификатор Shift был активен, иначе false
KeyboardEvent.ctrlKey : true, если модификатор Control был активен, иначе false
KeyboardEvent.metaKey : true, если Meta-модификатор был активен, иначе false
KeyboardEvent.repeat : true, если клавиша была нажата достаточно долго, чтобы вызвать ее повторение, иначе false
KeyboardEvent.isComposing : true, если ключевое событие происходит как часть сеанса композиции, иначе false

Пользовательский агент ДОЛЖЕН отправлять это событие при отпускании клавиши. Тип события keyup зависит от устройства и зависит от возможностей устройств ввода и их отображения в операционной системе. Этот тип события ДОЛЖЕН быть сгенерирован после сопоставления клавиш. Этот тип события ДОЛЖЕН быть отправлен после событий keydown, beforeinput и input, связанных с одним и тем же ключом.

События keydown и keyup традиционно связаны с обнаружением любой клавиши, а не только той, которая дает значение символа.

4.7 События Композиции

События композиции предоставляют средства для ввода текста дополнительным или альтернативным способом, а не событиями клавиатуры, чтобы разрешить использование символов, которые могут быть недоступны на клавиатуре. Например, события композиции могут использоваться для добавления акцентов к символам, несмотря на их отсутствие на стандартных клавиатурах США, для создания логограмм многих азиатских языков из их базовых компонентов или категорий, для выбора вариантов слов из комбинации нажатий клавиш клавиатуры на мобильном устройстве или для преобразования голосовых команд в текст с помощью процессора распознавания речи. Обратитесь к «§5 События клавиатуры и значения клавиш» для примеров того, как события композиции используются в сочетании с событиями клавиатуры.

Концептуально, составной сеанс состоит из одного события «составного запуска» compositionstart , одного или нескольких событий «составного обновления» compositionupdate и одного события «составного конца» compositionend, причем значение атрибута data сохраняется между каждым этапом этой цепочки событий во время каждого сеанса.

Примечание. Пока сеанс композиции активен, события клавиатуры могут отправляться в DOM, если клавиатура является устройством ввода, используемым в сеансе композиции. См. Подробности события «составного запуска» compositionstart и раздел IME для упорядочения соответствующих событий.

Не все системы или устройства IME предоставляют необходимые данные в DOM, поэтому активная строка композиции (опция «Окно чтения — Reading Window» или «пункт меню выбора кандидата — candidate selection menu option«) может быть недоступна через этот интерфейс, и в этом случае выбор МОЖЕТ быть представлен пустой строкой.

4.7.1 Интерфейс CompositionEvent

Введено в эту спецификацию.

Интерфейс CompositionEvent предоставляет конкретную контекстную информацию, связанную с событиями Composition.

Чтобы создать экземпляр интерфейса CompositionEvent, используйте конструктор CompositionEvent, передавая необязательный словарь CompositionEventInit.

4.7.1.1 CompositionEvent

[Constructor(DOMString type, optional CompositionEventInit eventInitDict), Exposed=Window]
interface CompositionEvent : UIEvent {
readonly attribute DOMString data;
};

data, of type DOMString, readonly

data содержит значение символов, сгенерированных методом ввода. Это МОЖЕТ быть одним символом Unicode или непустой последовательностью символов Unicode [Unicode]. Символы ДОЛЖНЫ быть нормализованы, как определено формой нормализации Unicode NFC, определенной в [UAX15]. Этот атрибут МОЖЕТ быть пустой строкой.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть «» (пустая строка).

4.7.1.2 CompositionEventInit

dictionary CompositionEventInit : UIEventInit {
DOMString data = "";
};

data, of type DOMString, defaulting to ""

Инициализирует атрибут data объекта CompositionEvent символам, сгенерированным композицией IME.

4.7.2 Порядок событий композиции

События составления, определенные в этой спецификации, ДОЛЖНЫ происходить в следующем порядке набора относительно друг друга:

Номер Тип события Примечание
1 compositionstart
2 compositionupdate Несколько событий
3 compositionend

4.7.3 Системы распознавания рукописного ввода

В следующем примере описывается возможная последовательность событий при составлении текстового отрывка «text» с помощью системы распознавания рукописного ввода, например, на планшете, которая смоделирована с помощью Composition Events.

Номер Тип события CompositionEvent data Примечание
1 compositionstart «»
Пользователь пишет слово на поверхности планшета
2 compositionupdate «test»
Пользователь отклоняет первое предложение о совпадении слов, выбирает другое соответствие
3 compositionupdate «text»
4 compositionend «text»

4.7.4 Отмена событий композиции

Если событие keydown отменяется, то События Композиции, которые сработали бы в результате этого keydown, НЕ ДОЛЖНЫ отправляться:

Номер Тип события Примечание
1 keydown Действие по умолчанию предотвращается, например, с помощью метода preventDefault()
Не композиционные события отправлены
2 keyup

Если исходное событие «составного запуска» compositionstart отменяется, то сеанс составления текста ДОЛЖЕН быть завершен. Независимо от того, завершен или нет сеанс композиции, событие «композиционного конца» compositionend ДОЛЖНО быть отправлено.

Номер Тип события Примечание
1 keydown
2 compositionstart Действие по умолчанию предотвращается, например, с помощью метода preventDefault()
Не композиционные события отправлены
3 compositionend
4 keyup

4.7.5 Ключевые события во время композиции

Во время сеанса композиции события keydown и keyup ДОЛЖНЫ по-прежнему отправляться, и эти события ДОЛЖНЫ иметь для атрибута isComposing значение true.

Номер Тип события KeyboardEvent
isComposing
Примечание
1 keydown false Это ключевое событие, которое инициирует состав
2 compositionstart
3 compositionupdate
4 keyup true
Любые ключевые события, отправленные во время сеанса композиции, ДОЛЖНЫ иметь для isComposing значение true.
5 keydown true Это ключевое событие, которое выходит из композиции.
6 compositionend
7 keyup false

4.7.6 Входные события во время композиции

Во время сеанса композиции ДОЛЖНО быть отправлено «обновление композиции» compositionupdate после отправки beforeinput, но до отправки события input.

Номер Тип события Примечание
1 beforeinput
2 compositionupdate
Любые обновления DOM происходят в этой точке
3 input

Большинство IME не поддерживают отмену обновлений во время сеанса композиции.

События beforeinput и input отправляются вместе с событием compositionupdate всякий раз, когда DOM обновляется как часть композиции. Поскольку нет никаких обновлений DOM, связанных с событием compositionend, события beforeinput и input не должны быть отправлены в это время.

Номер Тип события Примечание
1 beforeinput Отмена этого действия предотвратит обновление DOM и событие ввода input
2 compositionupdate
Любые обновления DOM происходят в этой точке
3 input Отправляется только в том случае, если DOM был обновлен
4 compositionend

4.7.7 Типы Событий Композиции

4.7.7.1 Тип события композиции — compositionstart
Тип события клавиатуры compositionstart
Интерфейс CompositionEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Начинает новый сеанс композиции, когда включена система композиции текста
Контекст (доверенные события) Event.target : сфокусированный элемент обработки композиции
UIEvent.view : Window
UIEvent.detail : 0
CompositionEvent.data : исходная редактируемая строка, в противном случае пустая строка

Агент пользователя должен отправить это событие, когда система композиции текста включена и новый сеанс композиции вот-вот начнется (или уже начался, в зависимости от системы композиции текста) при подготовке к составлению отрывка текста. Этот тип событий зависит от устройства и может зависеть от возможностей системы преобразования текста и от того, как она отображается в операционной системе. Когда клавиатура используется для подачи редактора методов ввода, этот тип события генерируется после события keydown, но системы распознавания речи или рукописного ввода могут отправлять этот тип события без событий клавиатуры. Некоторые реализации могут заполнять атрибут data события compositionstart текстом, выбранным в данный момент в документе (для редактирования и замены). В противном случае значение атрибута data должно быть пустой строкой.

Это событие должно быть отправлено непосредственно перед тем, как система композиции текста начнет новый сеанс композиции, и до того, как DOM будет изменен из-за процесса композиции. Действие по умолчанию этого события заключается в том, что система композиции текста запускает новый сеанс композиции. Если это событие отменено, система композиции текста должна отменить текущий сеанс композиции.

Отмена типа события compositionstart отличается от отмены самой системы композиции текста (например, нажатием кнопки отмены или закрытием окна IME).

Некоторые IME не поддерживают отмену текущего сеанса композиции (например, GTK, который в настоящее время не имеет такого API). В этих случаях вызов функции preventDefault() не остановит действие этого события по умолчанию.

4.7.7.2 Тип события композиции — compositionupdate
Тип события клавиатуры compositionupdate
Интерфейс CompositionEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : сфокусированный элемент обработки композиции, null, если он недоступен
UIEvent.view : Window
UIEvent.detail : 0
CompositionEvent.data : строка, содержащая текущие результаты сеанса композиции, которая может быть пустой строкой, если содержимое было удалено

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

В системах композиции текста, которые поддерживают текущую композицию в синхронизации с входным элементом управления, событие compositionupdate должно быть отправлено до обновления элемента управления.

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

Если сеанс композиции отменен, это событие будет запущено непосредственно перед событием compositionend, и атрибут data будет установлен в пустую строку.

4.7.7.3 Тип события композиции — compositionend
Тип события клавиатуры compositionend
Интерфейс CompositionEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : сфокусированный элемент обработки композиции
UIEvent.view : Window
UIEvent.detail : 0
CompositionEvent.data : строка, содержащая конечный результат сеанса композиции, который может быть пустой строкой, если содержимое было удалено или если процесс композиции был отменен

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

Это событие отправляется сразу же после того, как система композиции текста завершает сеанс композиции (например, IME закрывается, сворачивается, переключается из фокуса или иным образом отклоняется, и фокус возвращается к агенту пользователя).

5. События клавиатуры и значения клавиш

Этот раздел содержит необходимую информацию о событиях клавиатуры:

  • Объяснение раскладки клавиатуры, отображения и значений клавиш
  • Отношения между ключами, такими как мертвые ключи или ключи-модификаторы
  • Отношения между событиями клавиатуры и их действиями по умолчанию
  • Набор ключевых значений и рекомендации по расширению этого набора

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

5.1 Ввод с клавиатуры

Данный раздел является ненормативным

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

  • Механическая компоновка: размеры, размер и расположение физических клавиш на клавиатуре
  • Визуальная маркировка: метки (или легенды), которые обозначают каждый ключ
  • Функциональное отображение: абстрактная ассоциация ключ-значение каждого ключа.

Эта спецификация определяет только функциональное отображение в терминах key значений и code значений, но кратко описывает ключевые легенды для фона.

5.1.1 Ключевые Легенды

Этот раздел носит информативный характер

Легенда ключа (key legend) — это визуальная маркировка, которая печатается или выбивается на крышке ключа (прямоугольная «крышка», которая покрывает механический переключатель для ключа). Эти метки обычно состоят из одного или нескольких символов, которые вызовет нажатие клавиши (например, «G», «8» или «ш»), или имен или символов, указывающих на функцию этой клавиши (например, стрелка вверх»⇧», указывающая на сдвиг, или строка «Enter»). Клавиши часто обозначаются этой маркировкой (например, нажмите клавиши» Shift «и» G».). Заметим, однако, что внешний вид ключа не имеет никакого отношения к его цифровому представлению и во многих конфигурациях может быть совершенно неточным. Даже клавиши управления и функции, такие как Enter, могут быть сопоставлены с различными функциональными возможностями или даже сопоставлены как символьные клавиши.

Многие клавиатуры содержат клавиши, которые обычно не производят никаких символов, даже если символ может иметь эквивалент Unicode. Например, клавиша Shift может содержать символ»⇧», который имеет кодовую точку Unicode U+21E7, но нажатие клавиши Shift не приведет к получению этого значения символа, а кодовая точка Unicode для Shift отсутствует.

5.2 Код клавиши

code ключа — это атрибут события клавиатуры, который можно использовать для идентификации физического ключа, связанного с событием клавиатуры. Он похож на идентификаторы использования USB в том, что он предоставляет низкоуровневое значение (похожее на scancode), которое является нейтральным к поставщику.

Основная цель атрибута code — обеспечить последовательный и согласованный способ идентификации ключей на основе их физического местоположения. Кроме того, он также предоставляет стабильное имя (не зависящее от текущего состояния клавиатуры), которое уникально идентифицирует каждую клавишу на клавиатуре.

Список допустимых значений кода определяется в [UI Events-Code].

5.2.1 Мотивация для атрибута code

Стандартная клавиатура ПК имеет набор клавиш (которые мы называем системными клавишами записи), которые генерируют различные значения клавиш на основе текущей раскладки клавиатуры, выбранной пользователем. Эта ситуация затрудняет написание кода, который обнаруживает ключи на основе их физического расположения, так как код должен был бы знать, какой макет действует, чтобы знать, какие значения ключей нужно проверить. Реальный пример этого — игра, которая хочет использовать клавиши» W»,» A»,» S «и» D » для управления движением игрока. Атрибут code решает эту проблему, предоставляя стабильное значение для проверки, которое не зависит от текущей раскладки клавиатуры.

Кроме того, значения ключевого атрибута также зависят от текущего состояния клавиатуры. Из-за этого порядок нажатия и отпускания клавиш по отношению к клавишам-модификаторам может влиять на значения, хранящиеся в атрибуте ключа. Атрибут кода решает эту проблему, предоставляя стабильное значение, которое не зависит от текущего состояния клавиатуры.

5.2.2 Связь между ключом и кодом

key

Атрибут key предназначен для пользователей, которым интересно значение нажимаемой клавиши с учетом текущей раскладки клавиатуры (и IME; мертвым клавишам присваивается уникальное значение ключа). Пример использования: обнаружение измененных клавиш или голых клавиш-модификаторов (например, для выполнения действия в ответ на сочетание клавиш).

code

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

5.2.3 Примеры code

Пример № 16

Работа с левыми и правыми клавишами Alt

Раскладка клавиатуры KeyboardEvent
key
KeyboardEvent
code
Примечания
US «Alt» «AltLeft» DOM_KEY_LOCATION_LEFT
French «Alt» «AltLeft» DOM_KEY_LOCATION_LEFT
US «Alt» «AltRight» DOM_KEY_LOCATION_RIGHT
French «AltGr» «AltRight» DOM_KEY_LOCATION_RIGHT

В этом примере проверка атрибута key позволяет сопоставить Alt, не беспокоясь о том, какая клавиша Alt (левая или правая) была нажата. Проверка атрибута code позволяет сопоставить правую клавишу Alt («Alt Right»), не беспокоясь о том, какой макет в данный момент действует.

Обратите внимание, что во французском примере клавиши Alt и AltGr сохраняют свое левое и правое расположение, даже если существует только одна из каждой клавиши.

Пример № 17

Обработка ключа с одной кавычкой

Раскладка клавиатуры KeyboardEvent
key
KeyboardEvent
code
Примечания
US «‘» «Quote»
Japanese «:» «Quote»
US Intl «Dead» «Quote»

В этом примере показано, как значения мертвых ключей кодируются в атрибутах. Значения key варьируются в зависимости от текущей локали, в то время как атрибут code возвращает согласованное значение.

Пример № 18

Управление клавишей «2» (с нажатой клавишей Shift и без нее) на различных раскладках клавиатуры.

Раскладка клавиатуры KeyboardEvent
key
KeyboardEvent
code
Примечания
US «2» «Digit2»
US «@» «Digit2» shiftKey
UK «2» «Digit2»
UK «»» «Digit2» shiftKey
French «é» «Digit2»
French «2» «Digit2» shiftKey

Независимо от текущей локали или состояния клавиши-модификатора, нажатие клавиши с меткой «2» на клавиатуре США всегда приводит к появлению «Digit2» в атрибуте code.

Пример № 19

Последовательность событий клавиатуры: «Shift» и «2»

Сравните значения атрибутов в следующих двух ключевых последовательностях событий. Они оба производят символ » @ » на клавиатуре США, но отличаются порядком, в котором клавиши отпускаются. В первой последовательности порядок таков: Shift (вниз), 2 (вниз), 2 (вверх), Shift (вверх).

Номер Тип события KeyboardEvent
key
KeyboardEvent
code
Примечания
1 keydown «Shift» «ShiftLeft» DOM_KEY_LOCATION_LEFT
2 keydown «@» «Digit2» shiftKey
3 keypress «@» «.» (если поддерживается)
4 keyup «@» «Digit2» shiftKey
5 keyup «Shift» «ShiftLeft» DOM_KEY_LOCATION_LEFT

Во второй последовательности Shift освобождается перед 2, что приводит к следующему порядку событий: Shift (вниз), 2 (вниз), Shift (вверх), 2 (вверх).

Номер Тип события KeyboardEvent
key
KeyboardEvent
code
Примечания
1 keydown «Shift» «ShiftLeft» DOM_KEY_LOCATION_LEFT
2 keydown «@» «Digit2» shiftKey
3 keypress «@» «.» (если поддерживается)
4 keyup «Shift» «ShiftLeft» DOM_KEY_LOCATION_LEFT
5 keyup «2» «Digit2»

Обратите внимание, что значения, содержащиеся в атрибуте key, не совпадают между событиями keydown и keyup для ключа «2». Атрибут code предоставляет согласованное значение, которое не зависит от текущего состояния модификатора.

5.2.4 code и виртуальные клавиатуры

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

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

5.3 События клавиатуры key значения

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

Список допустимых значений key определяется в разделе [UI Events-Key].

Значения клавиш можно использовать для определения значения клавиши, которая была нажата, используя атрибут key. Авторы контента могут извлекать символьное значение прописных или строчных букв, цифр, символов или других клавиш, создающих символы, а также ключевое значение клавиш управления, клавиш-модификаторов, функциональных клавиш или других клавиш, которые не генерируют символы. Эти значения могут быть использованы для мониторинга конкретных входных строк, для обнаружения и воздействия на ввод модификатора в сочетании с другими входами (например, мышью), для создания виртуальных клавиатур или для любого количества других целей.

Ключевые значения также могут использоваться авторами контента при сравнении строк, в качестве значений атрибутов разметки (таких как ключ доступа HTML — accesskey) в соответствующих языках хоста или для других связанных целей. Соответствующий язык хоста должен позволять авторам контента использовать одно из двух эквивалентных строковых значений для ключевого значения: символьное значение или ключевое значение.

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

Значение клавиши не указывает на конкретную клавишу на физической клавиатуре и не отражает символ, напечатанный на клавише. Значение клавиши указывает текущее значение события с учетом текущего состояния всех активных клавиш и режимов ввода клавиш (включая режимы сдвига shift), отраженных в отображении операционной системы клавиатуры и сообщенных реализации. Другими словами, ключевое значение для клавиши с надписью O на клавиатуре QWERTY имеет ключевое значение «o» (строчная) в несмещенном состоянии и «O» (заглавная) в сдвинутом состоянии. Поскольку пользователь может сопоставить свою клавиатуру с произвольной пользовательской конфигурацией, автору контента рекомендуется не предполагать, что существует связь между сдвинутым и не сдвинутым состояниями ключа и большой формой (прописными или прописными буквами) и малой формой (строчными или строчными буквами) символьного представления, а вместо этого использовать значение атрибута key. Например, стандартная раскладка клавиатуры «102», изображенная в [UIEvents-Code], иллюстрирует один возможный набор сопоставлений клавиш на одной возможной раскладке клавиатуры. Существует множество других, как стандартных, так и своеобразных.

Чтобы упростить поддержку мертвых клавиш, когда отображение операционной системы клавиатуры обрабатывает состояние мертвых клавиш, текущее состояние последовательности мертвых клавиш не сообщается через атрибут key. Скорее всего, сообщается ключевое значение «мертвый» «Dead«. Вместо этого реализации генерируют события композиции, которые содержат промежуточное состояние мертвой ключевой последовательности, сообщаемой через атрибут data. Как и в предыдущем примере, значение ключа для ключа отмечен одним QWERTY клавиатурой имеет значение ‘ö’ в центральной позиции государства во время мертвых-ключа для того чтобы добавить умлаут диакритический знак, и ‘Ö’ в сдвинутой государства во время мертвых-ключа для того чтобы добавить умлаут диакритический знак.

Важно также отметить, что между ключевыми состояниями событий и ключевыми значениями не существует однозначной связи. Определенное значение ключа может быть связано с несколькими ключами. Например, многие стандартные клавиатуры содержат более одной клавиши со значением клавиши Shift (обычно отличающимся значениями расположения DOM_KEY_LOCATION_LEFT и DOM_KEY_LOCATION_RIGHT) или 8 клавиш (обычно отличающимся значениями расположения DOM_KEY_LOCATION_STANDARD и DOM_KEY_LOCATION_NUMPAD), а настроенные пользователем пользовательские раскладки клавиатуры могут дублировать любое значение клавиши в нескольких сценариях состояния ключа (обратите внимание, что расположение предназначено для стандартных раскладок клавиатуры и не всегда может указывать на значимое различие).

Наконец, значение любого данного представления символов зависит от контекста и является сложным. Например, в некоторых контекстах символ звездочки ( » * » ) представляет собой сноску или ударение (при взятии текста в квадратные скобки). Однако в некоторых документах или исполняемых программах она эквивалентна математической операции умножения, в то время как в других документах или исполняемых программах эта функция зарезервирована для символа умножения («×», значение Unicode U+00D7) или Латинской маленькой буквы «x» (из-за отсутствия клавиши умножения на многих клавиатурах и поверхностного сходства символов «×» и «x»). Таким образом, семантическое значение или функция символьных представлений выходит за рамки данной спецификации.

5.3.1 Клавиша-модификатор

Ввод с клавиатуры использует клавиши-модификаторы для изменения нормального поведения клавиши. Как и другие ключи, ключи-модификаторы генерируют события keydown и keyup, как показано в примере ниже. Некоторые модификаторы активируются, когда клавиша нажата или поддерживается нажатой, например Alt, Control, Shift, AltGraph или Meta. Другие модификаторы активируются в зависимости от их состояния, например CapsLock, NumLock или ScrollLock. Изменение состояния происходит при нажатии клавиши-модификатора. Интерфейс KeyboardEvent предоставляет удобные атрибуты для некоторых распространенных ключей-модификаторов: ctrlKey, shiftKey, altKey, metaKey. Некоторые операционные системы имитируют клавишу-модификатор AltGraph с помощью комбинации клавиш-модификаторов Alt и Control. Реализации рекомендуется использовать ключ-модификатор AltGraph.

Пример № 20

В этом примере описывается возможная последовательность событий, связанных с генерацией символа Юникода Q (Латинская заглавная буква Q, кодовая точка Юникода U+0051) на клавиатуре США с использованием сопоставления США:

Номер Тип события KeyboardEvent
key
Модификаторы Примечания
1 keydown «Shift» shiftKey
2 keydown «Q» shiftKey Латинская Заглавная Буква Q
3 beforeinput
4 input
5 keyup «Q» shiftKey
6 keyup «Shift»

Пример № 21

В этом примере описана альтернативная последовательность клавиш для приведенного выше примера, где клавиша Shift отпускается перед клавишей Q. Значение ключа для ключа Q вернется к его несмещенному значению для события keyup:

Номер Тип события KeyboardEvent
key
Модификаторы Примечания
1 keydown «Shift» shiftKey
2 keydown «Q» shiftKey Латинская Заглавная Буква Q
3 beforeinput
4 input
5 keyup «Shift» Латинская строчная буква Q
6 keyup «q»

Пример № 22

В следующем примере описывается возможная последовательность ключей, которая не генерирует символ Unicode (используется та же конфигурация, что и в предыдущем примере):

Номер Тип события KeyboardEvent
key
Модификаторы Примечания
1 keydown «Control» ctrlKey
2 keydown «v» ctrlKey Латинская строчная буква V
События beforeinput или input не генерируются
3 keyup «v» ctrlKey Латинская строчная буква V
4 keyup «Control»

Пример № 23

В следующем примере показана последовательность событий при нажатии клавиш Shift и Control:

Номер Тип события KeyboardEvent
key
Модификаторы Примечания
1 keydown «Control» ctrlKey
2 keydown «Shift» ctrlKey, shiftKey
3 keydown «V» ctrlKey, shiftKey Латинская Заглавная Буква V
События beforeinput или input не генерируются
4 keyup «V» ctrlKey, shiftKey Латинская Заглавная Буква V
5 keyup «Shift» ctrlKey
6 keyup «Control»

Пример № 24

Для раскладки клавиатуры за пределами США последовательность событий одинакова, но значение клавиши основано на текущей раскладке клавиатуры. В этом примере показана последовательность событий при использовании арабской раскладки клавиатуры:

Номер Тип события KeyboardEvent
key
Модификаторы Примечания
1 keydown «Control» ctrlKey
2 keydown «ر» ctrlKey Арабские Буквы Рэ
События beforeinput или input не генерируются
3 keyup «ر» ctrlKey Арабские Буквы Рэ
4 keyup «Control»

Значение в событиях keydown и keyup изменяется в зависимости от текущей раскладки клавиатуры, действующей при нажатии клавиши. Это означает, что клавиша «v» на американском макете и клавиша «M» на арабском макете будут генерировать разные события, даже если они являются одним и тем же физическим ключом. Чтобы идентифицировать эти события как исходящие из одного и того же физического ключа, вам нужно будет использовать атрибут code.

В некоторых случаях ключи-модификаторы изменяют значение ключа для ключевого события. Например, на некоторых клавиатурах MacOS клавиша с надписью «удалить» функционирует так же, как клавиша Backspace в ОС Windows, когда она не изменена, но при изменении с помощью клавиши Fn действует как клавиша Delete, и значение клавиши будет соответствовать наиболее подходящей функции клавиши в ее текущем измененном состоянии.

5.3.2 Мертвые клавиши

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

Операционные системы MacOS и Linux используют методы ввода для обработки мертвых ключей.

Мертвые клавиши (во всех раскладках клавиатуры и отображениях) представлены значением ключа Dead. В ответ на любое нажатие мертвой клавиши события композиции должны быть отправлены агентом пользователя, а значение data события compositionupdate должно быть символьным значением текущего состояния последовательности объединения мертвых клавиш.

В то время как комбинирующие символы Юникода всегда следуют за последовательностью рукописного ввода, причем комбинирующий символ следует за соответствующей буквой, типичный ввод мертвой клавиши может изменить последовательность, причем комбинирующий символ находится перед соответствующей буквой. Например, слово naïve, использующее комбинирующую диакритику, будет последовательно представлено в Юникоде как наивное, но может быть набрано наивным. Последовательность нажатий клавиш U+0302 (сочетание акцентной клавиши Circumflex) и U+0065 (клавиша, отмеченная Латинской строчной буквой E), скорее всего, произведет (на французской клавиатуре с использованием французского отображения и без какого-либо активированного модификатора) символ Unicode «é» (Латинская строчная буква E с Circumflex), как предпочтительно в форме нормализации Unicode NFC.

Пример № 25

Номер Тип события KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
Примечания
1 keydown «Dead» false Сочетая Облеченным Ударением (Мертвый Ключ)
2 compositionstart «»
3 compositionupdate U+0302
4 keyup «Dead» true
5 keydown «ê» true
6 compositionupdate «ê»
7 compositionend «ê»
8 keyup «e» false Латинская Строчная Буква Е

Во втором событии keydown (Шаг 5) значение ключа (при условии, что событие не подавлено) не будет «e» (Латинская строчная буква E key) при нормальных обстоятельствах, потому что значение, доставленное агенту пользователя, уже будет изменено операцией «dead key».

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

Пример № 26

Номер Тип события KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
Примечания
1 keydown «Dead» false Сочетая Облеченным Ударением (Мертвый Ключ)
2 compositionstart «»
3 compositionupdate U+0302
4 keyup «Dead» true
5 keydown «q» true Латинская строчная буква Q
6 compositionupdate «»
7 compositionend «»
8 keyup «q» false

5.3.3 Редакторы Методов Ввода

Эта спецификация включает в себя модель для редакторов методов ввода (IMEs), через интерфейс CompositionEvent и события. Однако события композиции и события клавиатуры не обязательно сопоставляются как отношения «один к одному». Например, получение keydown для значения ключа Accept не обязательно означает, что текст, выбранный в данный момент в IME, принимается, но указывает только на то, что произошло нажатие клавиши, отключенное от функциональности IME Accept (что обычно приводит к событию compositionend в большинстве систем IME). События клавиатуры не могут использоваться для определения текущего состояния редактора методов ввода, которое может быть получено с помощью атрибута data интерфейса CompositionEvent. Кроме того, системы и устройства IME различаются по своей функциональности и по тому, какие ключи используются для активации этой функциональности, так что ключи преобразования и принятия могут быть представлены другими доступными ключами. События клавиатуры соответствуют событиям, генерируемым устройством ввода после сопоставления раскладки клавиатуры.

В некоторых реализациях или конфигурациях системы некоторые ключевые события или их значения могут подавляться используемым IME.

В следующем примере описана возможная последовательность ключей для генерации символа Юникода » 市 » (Кандзи-символ, часть унифицированных идеограмм CJK) с использованием японских методов ввода. В этом примере предполагается, что редактор методов ввода активирован и находится в режиме ввода японского языка Ромадзи. Клавиши Convert и Accept могут быть заменены другими в зависимости от используемого устройства ввода и конфигурации IME, например, это могут быть соответственно U+0020 (клавиша пробела) и Enter.

«詩» (стихотворение) и» 市 » (город) — это омофоны, оба произносятся как し (ши/си), поэтому пользователю необходимо использовать клавишу преобразования, чтобы выбрать правильный вариант.

Пример № 27

Номер Тип события KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
Примечания
1 keydown «s» false Латинская Строчная Буква S
2 compositionstart «»
3 beforeinput
4 compositionupdate «s»
DOM обновлен
5 input
6 keyup «s» true
7 keydown «i» true Латинская Маленькая Буква I
8 beforeinput
9 compositionupdate «し» shi
DOM обновлен
10 input
11 keyup «i» true
12 keydown «Convert» true Преобразование
13 beforeinput
14 compositionupdate «詩» «poem»
DOM обновлен
15 input
16 keyup «Convert» true
17 keydown «Convert» true Преобразование
18 beforeinput
19 compositionupdate «市» «city»
DOM обновлен
20 input
21 keyup «Convert» true
22 keydown «Accept» true Accept
23 compositionend «市»
24 keyup «Accept» false

Композиция IME также может быть отменена, как в следующем примере, с условиями, идентичными предыдущему примеру. Клавиша отмены также может быть заменена другими в зависимости от используемого устройства ввода и конфигурации времени, например, это может быть U+001B (Escape-ключ).

Номер Тип события KeyboardEvent
key
KeyboardEvent
isComposing
CompositionEvent
data
Примечания
1 keydown «s» false Латинская строчная буква S
2 compositionstart «»
3 compositionupdate «s»
4 keyup «s» true
5 keydown «i» true Латинская строчная буква I
6 compositionupdate «し» shi
7 keyup «i» true
8 keydown «Convert» true Преобразование
9 compositionupdate «詩» «poem»
10 keyup «Convert» true
11 keydown «Convert» true Преобразование
12 compositionupdate «市» «city»
13 keyup «Convert» true
14 keydown «Cancel» true Отмена
15 compositionupdate «»
16 compositionend «»
17 keyup «Cancel» false

Некоторые редакторы методов ввода (например, в операционной системе MacOS) могут установить пустую строку в атрибут данных композиции перед отменой композиции.

5.3.3.1 Клавиши режима редактора метода ввода

Некоторые клавиши на некоторых устройствах предназначены для активации функциональности редактора методов ввода или для изменения режима активного редактора методов ввода. Пользовательские клавиши для этой цели могут быть определены для различных устройств или языковых режимов. Ключи, определенные в этой спецификации для этой цели: «буквенно-цифровой», «кодовый ввод»,» окончательный режим»,» Хангульмоде»,» Ханджамоде»,» Хирагане»,» Джунджамоде»,» Канамоде»,» Кандзимоде»,» Катакане «и»романских характеристиках». Когда одна из этих клавиш нажата, а IME в данный момент не активен, ожидается, что соответствующее время будет активировано в режиме, указанном клавишей (если таковая имеется). Если IME уже активен, когда нажата клавиша, активный IME может измениться в указанный режим, или может быть запущен другой IME, или может быть проигнорирован, на основе конкретного устройства и приложения.

Эта спецификация также определяет другие ключи, предназначенные специально для работы с редакторами методов ввода: «Accept«, «AllCandidates«, «Cancel«, «Convert«, «Compose«, «FullWidth«, «HalfWidth«, «NextCandidate«, «Nonconvert» и «PreviousCandidate«. Функции этих ключей не определены в данной спецификации — обратитесь к другим ресурсам для получения подробной информации о функциональности редактора методов ввода.

Клавиши с функциями редактора методов ввода не ограничены этой целью и могут иметь другие специфические для устройства или реализации цели.

5.3.4 Действия по умолчанию и отменяемые события клавиатуры

Отмена действия по умолчанию события keydown не должна влиять на его соответствующее событие keyup, но она должна предотвратить создание соответствующих событий beforeinput и input (и нажатия клавиш, если они поддерживаются). В следующем примере описывается возможная последовательность клавиш для генерации символа Юникода Q (Латинская заглавная буква Q) на клавиатуре США с использованием сопоставления США:

Пример № 29

Номер Тип события KeyboardEvent
key
InputEvent
data
Модификаторы Примечания
1 keydown «Shift» shiftKey
2 keydown «Q» shiftKey Действие по умолчанию предотвращается, например, вызовом preventDefault()
Никакие события «перед вводом» beforeinput или «ввод» input (или «нажатие клавиши» keypress, если поддерживается) не генерируются
3 keyup «Q» shiftKey
4 keyup «Shift»

Если ключ является ключом-модификатором, то нажатие клавиши все равно должно учитываться для состояний модификаторов. В следующем примере описывается возможная последовательность клавиш для генерации символа Юникода Q (Латинская заглавная буква Q) на клавиатуре США с использованием сопоставления США:

Пример № 30

Номер Тип события KeyboardEvent
key
InputEvent
data
Модификаторы Примечания
1 keydown «Shift» shiftKey Действие по умолчанию предотвращается, например, вызовом preventDefault()
2 keydown «Q» shiftKey
3 beforeinput «Q»
4 input
5 keyup «Q» shiftKey
6 keyup «Shift»

Если клавиша является частью последовательности из нескольких нажатий клавиш, будь то мертвая клавиша или она вносит свой вклад в последовательность редактора методов ввода, нажатие клавиши должно игнорироваться (не учитываться) только в том случае, если действие по умолчанию отменяется в событии keydown. Отмена мертвого ключа в событии keyup не влияет на события beforeinput или input. В следующем примере используется мертвая клавиша «Dead» (U+0302, сочетающая окружную акцентную клавишу) и «e» (U + 0065, Латинская строчная буква E) на французской клавиатуре с использованием французского сопоставления и без какого-либо активированного модификатора:

Номер Тип события KeyboardEvent
key
InputEvent
data
Модификаторы Примечания
1 keydown «Dead» Действие по умолчанию предотвращается, например, вызовом preventDefault ().
2 keyup «Dead»
3 keydown «e»
4 keyup «e»
5 input
6 keyup «e»

 

6. Инициализаторы Унаследованных Событий

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

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

Пример № 32

Инициализация всех атрибутов события мутации MutationEvent требует вызова двух методов инициализатора: initEvent и initMutationEvent.

 

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

6.1 Унаследованные Интерфейсы Инициализатора Событий

Этот раздел носит информативный характер

В этом разделе описываются устаревшие методы инициализатора, которые были введены в более ранних версиях этой спецификации.

6.1.1 Инициализаторы для интерфейса UIEvent

partial interface UIEvent {
// Устарело в этой спецификации
void initUIEvent();
};

initUIEvent()

Инициализирует атрибуты объекта UIEvent. Этот метод имеет то же поведение, что и initEvent().

Метод initUIEvent устарел, но поддерживается для обратной совместимости с широко развернутыми реализациями.

DOMString typeArg

Описание этого параметра см. в методе initEvent().

boolean bubblesArg

Описание этого параметра см. в методе initEvent().

boolean cancelableArg

Описание этого параметра см. в методе initEvent().

Window? viewArg

Указывает view. Это значение может быть null.

long detailArg

Указывает detail

6.1.2 Инициализаторы для интерфейса MouseEvent

partial interface MouseEvent {
// Устарело в этой спецификации
void initMouseEvent();
};

initMouseEvent()

Инициализирует атрибуты объекта MouseEvent. Этот метод имеет то же поведение, что и UIEvent.initUIEvent().

Метод initMouseEvent устарел, но поддерживается для обратной совместимости с широко развернутыми реализациями.

DOMString typeArg

Описание этого параметра см. в методе initEvent().

boolean bubblesArg

Описание этого параметра см. в методе initEvent().

boolean cancelableArg

Описание этого параметра см. в методе initEvent().

Window? viewArg

Указывает view. Это значение может быть null.

long detailArg

Указывает detail

long screenXArg

Указывает screenX

long screenYArg

Указывает screenY

long clientXArg

Указывает clientX

long clientYArg

Указывает clientY

boolean ctrlKeyArg

Указывает ctrlKey

boolean altKeyArg

Указывает altKey

boolean shiftKeyArg

Указывает shiftKey

boolean metaKeyArg

Указывает metaKey

short buttonArg

Указывает button

EventTarget? relatedTargetArg

Указывает relatedTarget. Это значение может быть null.

6.1.3 Инициализаторы для интерфейса WheelEvent

partial interface WheelEvent {
// Первоначально введенный (и устаревший) в этой спецификации
void initWheelEvent();
};

initWheelEvent()

Инициализирует атрибуты объекта WheelEvent. Этот метод имеет то же поведение, что и MouseEvent.initMouseEvent().

Метод initWheelEvent устарел.

DOMString typeArg

Описание этого параметра см. в методе initEvent().

boolean bubblesArg

Описание этого параметра см. в методе initEvent().

boolean cancelableArg

Описание этого параметра см. в методе initEvent().

Window? viewArg

Указывает view. Это значение может быть null.

long detailArg

Указывает detail

long screenXArg

Указывает screenX

long screenYArg

Указывает screenY

long clientXArg

Указывает clientX

long clientYArg

Указывает clientY

short buttonArg

Указывает button

EventTarget? relatedTargetArg

Указывает relatedTarget. Это значение может быть null.

DOMString modifiersListArg

Разделенный пробелом список значений ключа модификатора, которые будут активированы на этом объекте. Например, «Control Shift» помечает модификаторы control и shift как активированные (унаследованные атрибуты ctrlKey и shiftKey будут иметь значение true для инициализированного объекта WheelEvent).

double deltaXArg

Указывает deltaX

double deltaYArg

Указывает deltaY

double deltaZArg

Указывает deltaZ

unsigned long deltaMode

Указывает deltaMode

6.1.4 Инициализаторы для интерфейса KeyboardEvent

Список аргументов к этому устаревшему инициализатору KeyboardEvent не включает detailArg (присутствующий в других инициализаторах) и добавляет аргумент locale (см. §11.2 изменения между различными черновиками событий пользовательского интерфейса); необходимо сохранить эту несогласованность для совместимости с существующими реализациями.

partial interface KeyboardEvent {
// Первоначально введенный (и устаревший) в этой спецификации
void initKeyboardEvent(DOMString typeArg,
optional boolean bubblesArg = false,
optional boolean cancelableArg = false,
optional Window? viewArg = null,
optional DOMString keyArg = "",
optional unsigned long locationArg = 0,
optional boolean ctrlKey = false,
optional boolean altKey = false,
optional boolean shiftKey = false,
optional boolean metaKey = false);
};

initKeyboardEvent()

Инициализирует атрибуты объекта KeyboardEvent. Этот метод имеет то же поведение, что и UIEvent.initUIEvent(). Значение detail остается неопределенным.

Метод initKeyboardEvent устарел.

DOMString typeArg

Описание этого параметра см. в методе initEvent().

boolean bubblesArg

Описание этого параметра см. в методе initEvent().

boolean cancelableArg

Описание этого параметра см. в методе initEvent().

Window? viewArg

Указывает view. Это значение может быть null.

DOMString keyArg

Указывает key

unsigned long locationArg

Указывает location

boolean ctrlKey

Указывает, активен ли модификатор клавиши Control.

boolean altKey

Указывает, активен ли модификатор клавиши Alt.

boolean shiftKey

Указывает, активен ли модификатор клавиши Shift.

boolean metaKey

Указывает, активен ли модификатор клавиши Meta.

6.1.5 Инициализаторы для интерфейса CompositionEvent

Список аргументов к этому устаревшему инициализатору CompositionEvent не включает detailArg (присутствующий в других инициализаторах) и добавляет аргумент locale (см. §11.2 изменения между различными черновиками событий пользовательского интерфейса); необходимо сохранить эту несогласованность для совместимости с существующими реализациями.

partial interface CompositionEvent {
// Первоначально введенный (и устаревший) в этой спецификации
void initCompositionEvent();
};

initCompositionEvent()

Инициализирует атрибуты объекта CompositionEvent. Этот метод имеет то же поведение, что и UIEvent.initUIEvent(). Значение detail остается неопределенным.

Метод initCompositionEvent устарел.

DOMString typeArg

Описание этого параметра см. в методе initEvent().

boolean bubblesArg

Описание этого параметра см. в методе initEvent().

boolean cancelableArg

Описание этого параметра см. в методе initEvent().

Window? viewArg

Указывает view. Это значение может быть null.

DOMString dataArg

Указывает data

DOMString locale

Задает атрибут locale события CompositionEvent.

7. Устаревшие Атрибуты Событий Key & Mouse

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

Эти функции никогда не были официально определены, и текущие реализации браузера существенно различаются. Большое количество устаревшего контента, включая библиотеки сценариев, которые полагаются на обнаружение агента пользователя и действуют соответственно, означает, что любая попытка формализовать эти устаревшие атрибуты и события будет рисковать сломать столько контента, сколько это исправит или позволит. Кроме того, эти атрибуты не подходят для международного использования и не решают проблем доступности.

Таким образом, эта спецификация не содержит нормативного определения событий и атрибутов, обычно используемых для обработки ввода с клавиатуры, хотя они могут присутствовать в Агентах пользователей для совместимости с устаревшим контентом. Авторы должны использовать атрибут key вместо атрибутов charCode и keyCode.

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

7.1 Унаследованный UIEvent дополнительный интерфейс

Данный раздел является ненормативным

Агенты пользователей традиционно включали атрибут which, чтобы события клавиатуры и мыши могли записывать дополнительную информацию о событиях.

Предыдущие версии этой спецификации определяли отдельные атрибуты which непосредственно на KeyboardEvent и MouseEvent, а не общий атрибут which, определенный на UIEvent.

7.1.1 Интерфейс UIEvent (дополнительный)

Частичный интерфейс UIEvent — это информативное расширение интерфейса UIEvent, которое добавляет атрибут which.

partial interface UIEvent {
// The following support legacy user agents
readonly attribute unsigned long which;
};

which, of type unsigned long, readonly

Для событий мыши MouseEvent это содержит значение, равное значению, хранящемуся в button+1. Для событий клавиатуры KeyboardEvent это содержит зависящий от системы и реализации числовой код, означающий неизмененный идентификатор, связанный с нажатой клавишей. В большинстве случаев значение совпадает с кодом ключа keyCode.

7.1.2 Интерфейс UIEventInit (дополнительный)

Браузеры, включающие поддержку «which» в «UIEvent«, также должны добавить следующие элементы в словарь UIEventInit.

Частичный словарь UIEventInit является информативным расширением словаря UIEventInit, который добавляет элемент which для инициализации соответствующих атрибутов UIEvent.

partial dictionary UIEventInit {
unsigned long which = 0;
};

which

Инициализирует атрибут which объекта UIEvent.

7.2 Устаревший дополнительный интерфейс KeyboardEvent

Данный раздел является ненормативным

Браузерная поддержка клавиатур традиционно опиралась на три специальных атрибута: keyCode, charCode и which событий пользовательского интерфейса UIEvent.

Все три этих атрибута возвращают числовой код, который представляет некоторый аспект нажатой клавиши:

  • keyCode — это индекс самой клавиши.
  • charcode — это ASCII-код клавиши символов.
  • which — это значение символа, если оно доступно, а в противном случае-ключевой индекс.

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

7.2.1 Интерфейс KeyboardEvent (дополнительный)

Частичный интерфейс KeyboardEvent — это информативное расширение интерфейса KeyboardEvent, которое добавляет атрибуты charCode и keyCode.

Частичный интерфейс KeyboardEvent может быть получен с помощью вызова метода createEvent() в реализациях, поддерживающих это расширение.

partial interface KeyboardEvent {
// Следующая поддержка устаревших пользовательских агентов
readonly attribute unsigned long charCode;
readonly attribute unsigned long keyCode;
};

charCode, of type unsigned long, readonly

charCode содержит символьное значение для событий нажатия клавиш keypress, которые генерируют ввод символов. Значение — это ссылочный номер Юникода (кодовая точка) этого символа (например, event.charCode = event.key.charCodeAt(0) для печатаемых символов). Для событий keydown (клавиша вниз) и keyup (клавиша вверх), значение charCode является «0«.

keyCode, of type unsigned long, readonly

keyCode содержит зависящий от системы и реализации числовой код, обозначающий неизмененный идентификатор, связанный с нажатой клавишей. В отличие от атрибута key, набор возможных значений в этой спецификации не определен нормативным образом. Как правило, эти значения keyCode должны представлять десятичную кодовую точку в ASCII [RFC20] [US-ASCII] или Windows 1252 [WIN1252], но могут быть взяты из другого соответствующего набора символов. Реализации, которые не могут идентифицировать ключ, используют значение ключа 0.

См. §7.3 устаревшие модели ключей для получения более подробной информации о том, как определить значения для keyCode.

7.2.2 Интерфейс KeyboardEventInit (дополнительный)

Браузеры, которые поддерживают keyCode, charCode и which в KeyboardEvent также должны добавить следующие члены в словарь KeyboardEventInit.

Частичный KeyboardEventInit словарь является информативным расширением KeyboardEventInit словаря, который добавляет charCode, keyCode, и which члены для инициализации соответствующих атрибутов KeyboardEvent.

partial dictionary KeyboardEventInit {
// Следующая поддержка устаревших пользовательских агентов
unsigned long charCode = 0;
unsigned long keyCode = 0;
};

charCode

Инициализирует атрибут charCode из KeyboardEvent для кодовой точки Unicode для символа события.

keyCode

Инициализирует атрибут keyCode из KeyboardEvent для числового кода, зависящего от системы и реализации, обозначающего неизменённый идентификатор, связанный с нажатой клавишей.

7.3 Устаревшие ключевые модели

Этот раздел ненормативный

Реализации отличаются тем, какие значения представлены в этих атрибутах для разных типов событий. Реализация МОЖЕТ выбрать выставить как виртуальные коды клавиш, так и коды символов в свойстве keyCode (сопоставленная модель) или сообщить отдельные свойства keyCode и charCode (разделенная модель).

7.3.1 Как определить keyCode для событий keydown и keyup?

KeyCode для событий keydown или keyup рассчитывается следующим образом:

  • Считайте код виртуального ключа из информации о событии операционной системы, если такая информация доступна.
  • Если редактор метода ввода обрабатывает ввод ключа, а событием является keydown, то возвращается значение 229.
  • Если клавиша ввода при нажатии без модификаторов вставит числовой символ (0-9), верните ASCII-код этого числового символа.
  • Если клавиша ввода при нажатии без модификаторов вставит символ нижнего регистра в алфавитный диапазон a-z, верните ASCII-код эквивалента верхнего регистра.
  • Если реализация поддерживает таблицу преобразования кода ключа для операционной системы и платформы, найдите это значение. Если таблица преобразования задает альтернативное значение виртуального ключа для данного входного сигнала, верните указанное значение.
  • Если функция ключа, определенная специфическим для реализации способом, соответствует одному из ключей в таблице §7.3.3 фиксированные виртуальные коды ключей, верните соответствующий код ключа.
  • Верните виртуальный код ключа из операционной системы.
  • Если код ключа не найден, верните 0.

7.3.2 Как определить keyCode для событий нажатия клавиш keypress?

Код ключа keyCode для событий нажатия клавиши keypress вычисляется следующим образом:

  • Если реализация поддерживает смешанную модель, установите keyCode в кодовую точку Unicode вводимого символа.
  • Если реализация поддерживает модель разделения, набор ключей к 0.

7.3.3 Фиксированные виртуальные коды клавиш

Виртуальные коды клавиш для следующих клавиш обычно не меняются при раскладке клавиатуры в настольных системах:

Клавиша Виртуальный Код Клавиши Примечание
Backspace 8
Tab 9
Enter 13
Shift 16
Control 17
Alt 18
CapsLock 20
Escape 27 Esc
Space 32
PageUp 33
PageDown 34
End 35
Home 36
ArrowLeft 37
ArrowUp 38
ArrowRight 39
ArrowDown 40
Delete 46 Del

7.3.4 Опционально фиксированные виртуальные коды ключей

Следующие знаки препинания могут изменять виртуальные коды между раскладками клавиатуры, но сообщение об этих значениях, скорее всего, будет более совместимо с устаревшим контентом, ожидающим US-English keyboard layout:

Клавиша Символ Виртуальный Код Клавиши
Semicolon «;» 186
Colon «:» 186
Equals sign «=» 187
Plus «+» 187
Comma «,» 188
Less than sign «<« 188
Minus «-« 189
Underscore «_» 189
Period «.» 190
Greater than sign «>» 190
Forward slash «/» 191
Question mark «?» 191
Backtick «`» 192
Tilde «~» 192
Opening squace bracket «[« 219
Opening curly brace «{« 219
Backslash «\» 220
Pipe «|» 220
Closing square bracket «]» 221
Closing curly brace «}» 221
Single quote «‘» 222
Double quote «»» 222

8. Устаревшие Типы Событий

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

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

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

Тип события Синх./Асинх. Фаза всплытия Типы целей доверенных событий Интерфейс DOM Отменяемый Сдержанный Действие по умолчанию
DOMActivate Синхронное Да Element UIEvent Да Да Не определено
DOMAttrModified Синхронное Да Element MutationEvent Нет Нет Не определено
DOMCharacterDataModified Синхронное Да Text, Comment, ProcessingInstruction MutationEvent Нет Нет Не определено
DOMFocusIn Синхронное Да Window, Element FocusEvent Нет Да Не определено
DOMFocusOut Синхронное Да Window, Element FocusEvent Нет Да Не определено
DOMNodeInserted Синхронное Да Element, Attr, Text, Comment, DocumentType, ProcessingInstruction MutationEvent Нет Нет Не определено
DOMNodeInsertedIntoDocument Синхронное Нет Element, Attr, Text, Comment, DocumentType, ProcessingInstruction MutationEvent Нет Нет Не определено
DOMNodeRemoved Синхронное Да Element, Attr, Text, Comment, DocumentType, ProcessingInstruction MutationEvent Нет Нет Не определено
DOMNodeRemovedFromDocument Синхронное Нет Element, Attr, Text, Comment, DocumentType, ProcessingInstruction MutationEvent Нет Нет Не определено
DOMSubtreeModified Синхронное Да Window, Document, DocumentFragment, Element, Attr MutationEvent Нет Нет Не определено
keypress Синхронное Да Element KeyboardEvent Да Да Зависит от: запуска системы компоновки текста; blur и focus событий; DOMActivate событие; другое событие

8.1. Унаследованные события UIEvent

8.1.1. Унаследованные типы событий UIEvent

8.1.1.1. DOMActivate
Тип устаревшего события DOMActivate
Интерфейс UIEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : активируемый элемент
UIEvent.view : Window
UIEvent.detail : 0

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

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

Хотя DOMActivate и click не полностью эквивалентны, реализованное поведение для типа события click разработано, чтобы охватить наиболее важные аспекты доступности, для которых был разработан тип события DOMActivate, и более широко реализовано. Авторам контента рекомендуется использовать тип события click, а не связанный с ним тип события mousedown или mouseup, чтобы обеспечить максимальную доступность.

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

 

Пример № 33

Тип события DOMActivate должен поддерживаться для XForms [XFORMS11], который предназначен для реализации в рамках хост-языка. В сценарии, где плагин или основанная на скрипте реализация XForms предназначена для установки в собственной реализации этой спецификации, которая не поддерживает тип события DOMActivate, агент пользователя XForms должен синтезировать и отправлять свои собственные события DOMActivate на основе соответствующих триггеров активации.

Таким образом, когда событие click отправляется агентом пользователя, соответствующим событиям пользовательского интерфейса, агент пользователя XForms должен определить, следует ли синтезировать событие DOMActivate с теми же релевантными свойствами, что и действие по умолчанию этого события click. Соответствующие сигналы могут быть связаны с тем, является ли событие click доверенным или его цель события имеет зарегистрированный прослушиватель событий DOMActivate.

 

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

Тип события DOMActivate устарел в этой спецификации.

8.1.2. Порядок событий активации

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

Номер Тип события Примечание
1 click
2 DOMActivate действие по умолчанию, если поддерживается агентом пользователя; synthesized; isTrusted= «true»
3 Все остальные действия по умолчанию, включая поведение активации

Если сфокусированный элемент активирован ключевым событием, то ниже показана типичная последовательность событий (с перечислением только соответствующих событий):

Номер Тип события Примечание
1 keydown ДОЛЖЕН быть ключ, который может активировать элемент, такой как клавиша Enter или (пробел), или элемент не активирован
2 click действие по умолчанию; синтезировано; isTrusted= «true»
3 DOMActivate действие по умолчанию, если поддерживается агентом пользователя; synthesized; isTrusted= «true»
4 Все остальные действия по умолчанию, включая поведение активации

8.2. Устаревшие события FocusEvent

8.2.1. Устаревшие типы событий FocusEvent

8.2.1.1. DOMFocusIn
Тип устаревшего события DOMFocusIn
Интерфейс FocusEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Window, Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : цель, получающая фокус
UIEvent.view : Window
UIEvent.detail : 0
FocusEvent.relatedTarget : null

Пользовательский агент ДОЛЖЕН отправить это событие, когда цель события получает фокус. Фокус ДОЛЖЕН быть отдан элементу перед отправкой этого типа события. Этот тип события ДОЛЖЕН быть отправлен после типа события focus.

Тип события DOMFocusIn определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события в пользу связанных типов событий focus и focusin.

8.2.1.2. DOMFocusOut
Тип устаревшего события DOMFocusOut
Интерфейс FocusEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Window, Element
Отменяемый Нет
Сдержанный Да
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : цель, теряющая фокус
UIEvent.view : Window
UIEvent.detail : 0
FocusEvent.relatedTarget : null

Пользовательский агент ДОЛЖЕН отправить это событие, когда цель события теряет фокус. Фокус ДОЛЖЕН быть взят из элемента перед отправкой этого типа события. Этот тип события ДОЛЖЕН быть отправлен после типа события blur.

Тип события DOMFocusOut определен в этой спецификации для справки и полноты, но эта спецификация не одобряет использование этого типа события в пользу связанных типов событий blur и focusout.

8.2.2 Устаревший порядок событий FocusEvent

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

Номер Тип события Примечание
Пользователь смещает фокус
1 focusin Отправлено до того, как первый целевой элемент получит фокус
2 focus Отправляется после того, как первый целевой элемент получает фокус
3 DOMFocusIn Если поддерживается
Пользователь смещает фокус
4 focusout Отправляется до того, как первый целевой элемент теряет фокус
5 focusin Отправлено до того, как второй целевой элемент получит фокус
6 blur Отправлено после того, как первый целевой элемент теряет фокус
7 DOMFocusOut Если поддерживается
8 focus Отправляется после того, как второй целевой элемент получает фокус
9 DOMFocusIn Если поддерживается

8.3 Устаревшие события KeyboardEvent

Событие нажатия клавиши keypress — это традиционный метод захвата ключевых событий и их обработки до того, как DOM будет обновлен с помощью эффектов нажатия клавиши. Код, который делает использование события keypress, как правило, опирается на устаревшие атрибуты charCode, keyCode, и which.

Обратите внимание, что событие keypress является специфичным для ключевых событий и было заменено более общей последовательностью событий beforeinput и input. Эти новые события ввода не являются специфичными для действий клавиатуры и могут быть использованы для захвата пользовательского ввода независимо от исходного источника.

8.3.1 Устаревшие типы событий KeyboardEvent

8.3.1.1. keypress
Тип устаревшего события keypress
Интерфейс KeyboardEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Да
Сдержанный Да
Действие по умолчанию Зависит от: запуска системы компоновки текста; событий blur и focus; DOMActivate событие; другое событие
Контекст (доверенные события) Event.target : фокусируемый элемент, обрабатывающий ключевое событие, или если элемент не сфокусирован, то элемент body, если доступен, в противном случае корневой элемент
UIEvent.view : Window
UIEvent.detail : 0
KeyboardEvent.charCode : наследственное значение символа для этого события
KeyboardEvent.keyCode : устаревший цифровой код для этого ключа
KeyboardEvent.which : устаревший цифровой код для этого ключа
KeyboardEvent.key : значение ключа нажатой клавиши
KeyboardEvent.code : значение кода, связанное с физическим расположением клавиши на клавиатуре
KeyboardEvent.location : расположение ключа на устройстве
KeyboardEvent.altKey : true, если модификатор Alt был активен, иначе false
KeyboardEvent.shiftKey : true, если модификатор Shift был активен, иначе false
KeyboardEvent.ctrlKey : true, если модификатор Control был активен, иначе false
KeyboardEvent.metaKey : true, если Meta-модификатор был активен, иначе false
KeyboardEvent.repeat : false
KeyboardEvent.isComposing : true, если ключевое событие происходит как часть сеанса композиции, иначе false

Если поддерживается пользовательским агентом, это событие ДОЛЖНО отправляться при нажатии клавиши, если и только если эта клавиша обычно выдает символьное значение. Тип события нажатия клавиши keypress зависит от устройства и зависит от возможностей устройств ввода и от того, как они отображаются в операционной системе.

Этот тип события ДОЛЖЕН быть сгенерирован после сопоставления клавиш. Он НЕ ДОЛЖЕН запускаться при использовании редактора метода ввода.

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

Авторам СЛЕДУЕТ использовать событие beforeinput вместо события keypress.

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

Тип события keypress определяется в данной спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события. В контексте редактирования авторы могут подписаться на событие beforeinput.

8.3.2. Порядок событий keypress

Тип события keypress ДОЛЖЕН быть отправлен после события keydown и до события keyup, связанного с тем же ключом.

Тип события keypress ДОЛЖЕН быть отправлен после события beforeinput и перед событием input, связанным с той же клавишей.

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

Пример № 34

Номер Тип события KeyboardEvent
key
InputEvent
data
Примечания
1 keydown «a»
2 beforeinput «a»
3 keypress «a»
Любые действия по умолчанию, связанные с этим ключом, например вставка символа в DOM
4 input
5 keyup «a»

8.4. Устаревшие события MutationEvent

Модули событий «mutation» и «mutation name» предназначены для уведомления о любых изменениях структуры документа, включая изменения атрибутов, текста или имен.

Ни один из типов событий, связанных с интерфейсом MutationEvent, не обозначен как отменяемый. Это связано с тем, что очень трудно использовать существующие интерфейсы DOM, которые вызывают изменения документа, если какие-либо изменения в документе могут произойти или не произойти из-за отмены результирующего события. Хотя это все еще желаемая возможность, было решено, что ее лучше оставить до добавления транзакций в DOM.

Многие отдельные модификации дерева могут вызывать отправку нескольких событий мутации. Вместо того, чтобы пытаться указать порядок событий мутации из-за каждой возможной модификации дерева, порядок этих событий оставлен на усмотрение реализации.

Интерфейс MutationEvent был представлен в событиях DOM Level 2, но еще не был полностью и взаимодействующе реализован между агентами пользователей. Кроме того, были высказаны критические замечания о том, что интерфейс, как он был разработан, представляет собой проблему производительности и реализации.

DOM4 [DOM] предоставляет новый механизм, использующий интерфейс MutationObserver, который обращается к случаям использования, которые решают события мутации, но более эффективным способом. Таким образом, эта спецификация описывает события мутации для справки и полноты унаследованного поведения, но не одобряет использование интерфейса MutationEvent.

8.4.1. Интерфейс MutationEvent

Представлено в DOM Level 2, не рекомендуется в данной спецификации.

Интерфейс MutationEvent предоставляет конкретную контекстную информацию, связанную с событиями Mutation.

Чтобы создать экземпляр интерфейса MutationEvent, используйте вызов метода createEvent().

interface MutationEvent : Event {
// attrChangeType
const unsigned short MODIFICATION = 1;
const unsigned short ADDITION = 2;
const unsigned short REMOVAL = 3;

readonly attribute Node? relatedNode;
readonly attribute DOMString prevValue;
readonly attribute DOMString newValue;
readonly attribute DOMString attrName;
readonly attribute unsigned short attrChange;

void initMutationEvent();
};

MODIFICATION

Attr был изменен на месте.

ADDITION

Attr был только что добавлен.

REMOVAL

Attr был только что удален.

relatedNode

relatedNode ДОЛЖЕН использоваться для идентификации вторичного узла, связанного с событием мутации. Например, если событие мутации отправлено узлу, указывающему, что его родитель изменился, relatedNode будет измененным родителем. Если вместо этого событие отправляется в поддерево, указывающее, что в нем был изменен узел, relatedNode ДОЛЖЕН быть измененным узлом. В случае события DOMAttrModified он указывает узел Attr, который был изменен, добавлен или удален.

Неинициализированное значение этого атрибута ДОЛЖНО быть null.

prevValue

prevValue указывает предыдущее значение узла Attr в событиях DOMAttrModified и узла CharacterData в событиях DOMCharacterDataModified.

Неинициализированное значение этого атрибута должно быть «» (пустая строка).

newValue

newValue указывает новое значение узла Attr в событиях DOMAttrModified и узла CharacterData в событиях DOMCharacterDataModified.

attrName

attrName указывает имя измененного узла Attr в событии DOMAttrModified.

НЕ инициализированное значение этого атрибута ДОЛЖНО быть «» (пустая строка).

attrChange

attrChange указывает тип изменения, которое вызвало событие DOMAttrModified. Значения могут быть MODIFICATION, ADDITION или REMOVAL.

Неинициализированное значение этого атрибута ДОЛЖНО быть 0.

Не существует определенной константы для значения attrChange, равного 0 (неинициализированное значение).

1

initMutationEvent()

Инициализирует атрибуты объекта MutationEvent. Этот метод имеет то же поведение, что и initEvent().

DOMString typeArg

Обратитесь к методу initEvent() для описания этого параметра.

boolean bubblesArg

Обратитесь к методу initEvent() для описания этого параметра.

boolean cancelableArg

Обратитесь к методу initEvent() для описания этого параметра.

Node? relatedNodeArg

Определяет MutationEvent.relatedNode.

DOMString prevValueArg

Определяет MutationEvent.prevValue. Это значение МОЖЕТ быть пустой строкой.

DOMString newValueArg

Определяет MutationEvent.newValue. Это значение МОЖЕТ быть пустой строкой.

DOMString attrNameArg

Определяет MutationEvent.attrName. Это значение МОЖЕТ быть пустой строкой.

unsigned short attrChangeArg

Определяет MutationEvent.attrChange. Это значение МОЖЕТ быть 0.

8.4.2 Устаревшие типы событий MutationEvent

Типы событий мутации перечислены ниже.

8.4.2.1. DOMAttrModified
Тип устаревшего события DOMAttrModified
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, атрибут которого изменяется
MutationEvent.attrName : имя измененного узла Attr
MutationEvent.attrChange : числовой код, соответствующий наиболее применимому attrChangeType
MutationEvent.relatedNode : узел Attr, который был изменен, добавлен или удален
MutationEvent.newValue : новое значение атрибута, если узел Attr был добавлен или изменен
MutationEvent.prevValue : предыдущее значение атрибута, если узел Attr был удален или изменен

Пользовательский агент ДОЛЖЕН отправить это событие после изменения значения Attr.value и после добавления или удаления узла Attr из Element. Целью события этого события ДОЛЖНА быть узел Element, на котором произошло изменение. Зависит от реализации, зависит ли этот тип события, когда дочерние элементы узла Attr изменяются способами, которые не влияют на значение Attr.value.

Тип события DOMAttrModified определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

8.4.2.2. DOMCharacterDataModified
Тип устаревшего события DOMCharacterDataModified
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Text, Comment, ProcessingInstruction
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : объект, содержание которого изменяется
MutationEvent.attrName : пустая строка
MutationEvent.attrChange : 0
MutationEvent.relatedNode : родительский узел объекта, содержимое которого изменяется
MutationEvent.newValue : новое значение объекта
MutationEvent.prevValue : предыдущее значение объекта

Пользовательский агент ДОЛЖЕН отправить это событие после того, как CharacterData.data или ProcessingInstruction.data были изменены, но сам узел не был вставлен или удален. Целью события этого события ДОЛЖЕН быть узел CharacterData или узел ProcessingInstruction.

Тип события DOMCharacterDataModified определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

8.4.2.3. DOMNodeInserted
Тип устаревшего события DOMNodeInserted
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element, Attr, Text, Comment, DocumentType, ProcessingInstruction
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, который вставляется
MutationEvent.attrName : пустая строка
MutationEvent.attrChange : 0
MutationEvent.relatedNode : родительский узел узла, который был вставлен, или ownerElement в случае узлов Attr
MutationEvent.newValue : пустая строка
MutationEvent.prevValue : пустая строка

Пользовательский агент ДОЛЖЕН отправить этот тип события, когда узел, отличный от узла Attr, был добавлен как дочерний узел другого узла. Пользовательский агент МОЖЕТ отправить это событие, когда узел Attr был добавлен к узлу Element (см. Примечание ниже). Это событие ДОЛЖНО быть отправлено после того, как вставка произошла. Цель этого события ДОЛЖНА быть вставляемым узлом.

Для обнаружения вставки атрибута используйте тип события DOMAttrModified.

Тип события DOMNodeInserted определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

8.4.2.4. DOMNodeInsertedIntoDocument
Тип устаревшего события DOMNodeInsertedIntoDocument
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Element, Attr, Text, Comment, DocumentType, ProcessingInstruction
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, который вставляется
MutationEvent.attrName : пустая строка
MutationEvent.attrChange : 0
MutationEvent.relatedNode : родительский узел узла, который был вставлен, или ownerElement в случае узлов Attr
MutationEvent.newValue : пустая строка
MutationEvent.prevValue : пустая строка

Пользовательский агент ДОЛЖЕН отправить это событие, когда узел был вставлен в документ, либо путем прямой вставки узла, либо вставки поддерева, в котором он содержится. Пользовательский агент МОЖЕТ рассматривать узел Attr как часть поддерева Element. Это событие ДОЛЖНО быть отправлено после того, как вставка произошла. Цель этого события ДОЛЖНА быть вставляемым узлом. Если узел вставляется напрямую, тип события DOMNodeInserted ДОЛЖЕН иметь место до этого типа события.

Тип события DOMNodeInsertedIntoDocument определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

8.4.2.5. DOMNodeRemoved
Тип устаревшего события DOMNodeRemoved
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Element, Attr, Text, Comment, DocumentType, ProcessingInstruction
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, который удаляется
MutationEvent.attrName : пустая строка
MutationEvent.attrChange : 0
MutationEvent.relatedNode : родительский узел удаляемого узла или ownerElement в случае узлов Attr
MutationEvent.newValue : пустая строка
MutationEvent.prevValue : пустая строка

Пользовательский агент ДОЛЖЕН отправить это событие, когда узел, отличный от узла Attr, удаляется из его родительского узла. Пользовательский агент МОЖЕТ отправить это событие, когда узел Attr удаляется из его ownerElement (см. Примечание ниже). Это событие ДОЛЖНО быть отправлено до удаления. Цель этого события ДОЛЖНА быть удаляемым узлом.

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

Тип события DOMNodeRemoved определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

8.4.2.6. DOMNodeRemovedFromDocument
Тип устаревшего события DOMNodeRemovedFromDocument
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Нет
Надежные цели Element, Attr, Text, Comment, DocumentType, ProcessingInstruction
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : элемент, который удаляется
MutationEvent.attrName : пустая строка
MutationEvent.attrChange : 0
MutationEvent.relatedNode : родительский узел удаляемого узла или ownerElement в случае узлов Attr
MutationEvent.newValue : пустая строка
MutationEvent.prevValue : пустая строка

Пользовательский агент ДОЛЖЕН отправить это событие, когда узел удаляется из документа, либо путем непосредственного удаления узла, либо удаления поддерева, в котором он содержится. Пользовательский агент МОЖЕТ рассматривать узел Attr как часть поддерева элемента. Это событие ДОЛЖНО быть отправлено до удаления. Целью события этого типа события ДОЛЖЕН быть удаляемый узел. Если узел удаляется напрямую, тип события DOMNodeRemoved ДОЛЖЕН иметь место до этого типа события.

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

Тип события DOMNodeRemovedFromDocument определен в данной спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

8.4.2.7. DOMSubtreeModified
Тип устаревшего события DOMSubtreeModified
Интерфейс MutationEvent
Синх / Асин Синхронный
Всплытие Да
Надежные цели Window, Document, DocumentFragment, Element, Attr
Отменяемый Нет
Сдержанный Нет
Действие по умолчанию Не определено
Контекст (доверенные события) Event.target : родительский узел изменяемого поддерева
MutationEvent.attrName : пустая строка
MutationEvent.attrChange : 0
MutationEvent.relatedNode : null
MutationEvent.newValue : пустая строка
MutationEvent.prevValue : пустая строка

Это общее событие для уведомления обо всех изменениях в документе. Его можно использовать вместо более конкретных событий «мутации» и «имени мутации«. Оно МОЖЕТ быть отправлено после одного изменения документа или, по усмотрению реализации, после нескольких изменений. Последний случай, как правило, ДОЛЖЕН использоваться для учета множества изменений, которые происходят либо одновременно, либо в быстрой последовательности. Цель этого события ДОЛЖНА быть наименьшим общим родителем произошедших изменений. Это событие ДОЛЖНО отправляться после любых других событий, вызванных мутацией (ями).

Тип события DOMSubtreeModified определен в этой спецификации для справки и полноты, но в этой спецификации не рекомендуется использовать этот тип события.

9. Расширение событий

Этот раздел ненормативный

9.1 Введение в расширенные события

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

9.2 Пользовательские События

Автор сценария МОЖЕТ определить приложение с точки зрения функциональных компонентов с типами событий, которые имеют значение для архитектуры приложения. Автор контента может использовать интерфейс CustomEvent для создания собственных событий, соответствующих уровню абстракции, который они используют.

 

Пример № 35

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

var chartData = ...;
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent( "updateChart", true, false, { data: chartData });
document.documentElement.dispatchEvent(evt);

9.3 Расширения Для Конкретной Реализации

Пока новое событие разрабатывается и прототипируется, или когда событие предназначено для специфической для реализации функциональности, желательно отличать его от стандартизированных событий. Разработчики ДОЛЖНЫ префиксировать типы событий, характерные для их реализаций, с помощью короткой строки, чтобы отличать ее от того же события в других реализациях и от стандартизированных событий. Это похоже на префиксы ключевых слов для конкретного поставщика в CSS, но без черточек («-«), используемых в CSS, поскольку это может вызвать проблемы при использовании в качестве имени атрибута в Javascript.

 

Пример № 36

Конкретный поставщик браузеров, FooCorp, может захотеть представить новое событие, переход. Этот поставщик реализует fooJump в своем браузере, используя свой префикс для конкретного поставщика: «foo». Первые пользователи начинают экспериментировать с событием, используя someElement.addEventListener («fooJump», doJump, false), и предоставляют обратную связь FooCorp, который соответствующим образом меняет поведение fooJump.

Через некоторое время другой поставщик, BarOrg, решает, что им также нужна эта функциональность, но реализует ее немного по-другому, поэтому они используют собственный префикс конкретного поставщика «bar» в названии своего типа события: barJump. Авторы контента, экспериментирующие с этой версией типа события перехода, регистрируют события с именем типа события BarOrg. Авторы контента, желающие написать код для обоих браузеров, могут либо зарегистрировать каждый тип события отдельно с помощью определенных обработчиков, либо использовать один и тот же обработчик и включить имя типа события. Таким образом, ранние эксперименты в разных кодовых базах не конфликтуют, и ранний пользователь может написать легко поддерживаемый код для нескольких реализаций.

В конце концов, по мере развития этой функции поведение обоих браузеров стабилизируется и может сойтись из-за обратной связи с автором и пользователем контента или посредством формальной стандартизации. Когда происходит стабилизация и уменьшается риск возникновения конфликтов, авторы контента могут удалить разветвленный код и использовать имя типа события перехода (даже до того, как оно будет формально стандартизировано), используя тот же обработчик события и более общий метод регистрации someElement.addEventListener (jump, doJump, false).

9.3.1 Известные специфичные для реализации префиксы

На момент написания известны следующие префиксы имен типов событий:

Префикс Веб движок Организация
moz, Moz Gecko Mozilla
ms, MS Trident Microsoft
o, O Presto Opera Software
webkit WebKit Apple, Google, others

10. Вопросы безопасности

В этом приложении обсуждаются вопросы безопасности для реализаций событий пользовательского интерфейса. Обсуждение ограничено вопросами безопасности, которые возникают непосредственно в результате реализации модели событий, API и событий, определенных в данной спецификации. Реализации обычно поддерживают другие функции, такие как языки сценариев, другие API и дополнительные события, не определенные в этом документе. Эти функции составляют неизвестный фактор и выходят за рамки этого документа. Разработчикам СЛЕДУЕТ ознакомиться со спецификациями таких функций для соответствующих соображений безопасности.

Многие из типов событий, определенных в этой спецификации, отправляются в ответ на действия пользователя. Это позволяет слушателям злонамеренных событий получить доступ к информации, которую пользователи обычно считают конфиденциальной, например, опечатки, которые они могли сделать при заполнении формы, если они пересматривают свой ответ на вопрос с несколькими вариантами ответов незадолго до отправки формы, свою скорость набора или основной механизм ввода. В худшем случае прослушиватели злонамеренных событий могут перехватывать все пользовательские взаимодействия и передавать их третьей стороне с помощью средств (не определенных в этой спецификации), которые обычно доступны в реализациях DOM, таких как интерфейс XMLHttpRequest.

В реализациях DOM, которые поддерживают средства для загрузки внешних данных, такие события, как событие ошибки error, могут обеспечить доступ к конфиденциальной информации о среде компьютерной системы или сети. Примером может служить вредоносный HTML-документ, который пытается внедрить ресурс в локальную сеть или локальный хост в разные порты. Затем встроенное приложение DOM может прослушивать ошибки error и события load, чтобы определить, какие другие компьютеры в сети доступны из локальной системы или какие порты открыты в системе для подготовки дальнейших атак.

Одной только реализации событий пользовательского интерфейса, как правило, недостаточно для выполнения атак такого рода, и применяются соображения безопасности средств, которые могут поддерживать такие атаки. Для соответствия этой спецификации реализации DOM МОГУТ предпринять разумные шаги, чтобы приложения DOM не получали доступа к конфиденциальной или конфиденциальной информации. Например, они могут отказаться от отправки событий загрузки на узлы, которые пытаются встроить ресурсы в локальную сеть.

11. Изменения

11.1 Изменения между событиями DOM Level 2 и событиями пользовательского интерфейса

Многочисленные пояснения к интерфейсам и типам событий были сделаны. Модуль HTMLEvents больше не определяется в этом документе. События focus и blur были добавлены в модуль UIEvent, а событие dblclick добавлено в модуль MouseEvent. Эта новая спецификация обеспечивает лучшее разделение между потоком событий DOM, типами событий и интерфейсами DOM.

11.1.1 Изменения в потоке событий DOM Level 2

Эта новая спецификация ввела следующие новые концепции в поток событий:

  • Слушатели событий теперь упорядочены. На уровне DOM 2 порядок событий не указан
  • Поток событий теперь включает объект Window, чтобы отразить существующие реализации

11.1.2 Изменения в типах событий DOM Level 2

Многие разъяснения были сделаны на типах событий. Соответствие теперь явно определяется для типов событий, а не только с точки зрения интерфейсов, используемых типами событий.

«MutationEvents» устарели. Поддержка событий в пространстве имен, присутствующих в ранних версиях этой спецификации, также была удалена.

Для пользовательских агентов, которые поддерживают типы событий DOMNodeInserted и DOMNodeRemoved, эта спецификация больше не требует, чтобы тип события запускался для узлов Attr.

Тип события resize больше не всплывает, а событие mousemove теперь можно отменять, отражая существующие реализации.

11.1.3 Изменения в интерфейсах событий уровня 2 DOM

Интерфейс Event

  • Интерфейс Event имеет один новый атрибут defaultPrevented и один новый метод stopImmediatePropagation()
  • timeStamp теперь является Number в привязке ECMAScript. Предлагается исправление для внесения того же изменения в [DOM-Level-3-Core]
  • В этой спецификации атрибут type учитывает регистр символов, в то время как события уровня 2 DOM считают type регистронезависимым.

Интерфейс EventTarget

Метод dispatchEvent() был изменен

Интерфейс MouseEvent

Интерфейс MouseEvent имеет один новый метод getModifierState()

Расширение EventException

Исключение EventException удалено в этой спецификации. Предыдущий код DISPATCH_REQUEST_ERR повторно отображается в исключение DOME типа InvalidStateError.

11.1.4 Новые интерфейсы

Интерфейсы CustomEvent, FocusEvent, KeyboardEvent, CompositionEvent и WheelEvent были добавлены в модуль Events.

11.2 Изменения между различными проектами событий пользовательского интерфейса

Документ DOM Level 3 Events изначально разрабатывался между 2000 и 2003 годами и был опубликован в виде заметки W3C в ожидании дальнейших отзывов и интереса со стороны разработчиков. В 2006 году он был отобран для пересмотра и продвижения по дорожке рекомендаций, а затем был пересмотрен, чтобы отразить текущее состояние реализации и потребности авторов сценариев (скриптов).

Несмотря на то, что DOM 3 Events был представлен только как Примечание W3C, а не как официальная Рекомендация, он получил некоторую реализацию, и на него также ссылались другие спецификации, поэтому предпринимаются все усилия, чтобы вызвать минимальные нарушения, при этом адаптируя спецификацию к текущей среде.

Текущая спецификация была значительно переупорядочена из более ранней формы Заметки W3C, а также из структуры Событий DOM2, чтобы прояснить материал. Были созданы новые диаграммы для более четкого представления иерархий и потоков событий. Вот некоторые из наиболее важных изменений между черновиками:

  • Функция идентификатора ключа (key identifier) была переименована в значение ключа (key value), чтобы отсеивать их от уникальных идентификаторов ключей.
  • Интерфейс KeyboardEvent был кратко (с 2003-2010) определен, чтобы иметь атрибуты keyIdentifier и keyLocation, но они были удалены в пользу текущих атрибутов ключа и местоположения. Эти атрибуты не получили широкого распространения.
  • Интерфейсы KeyboardEvent и CompositionEvent определили атрибут locale. Этот атрибут не был указан и перенесен в техническую заметку, пока он не будет указан надлежащим образом. Обратитесь к этой старой версии событий пользовательского интерфейса (до того, как спецификация DOM3Events была переименована в UI Events «События пользовательского интерфейса») для получения подробной информации.
  • У KeyboardEvent также был атрибут char, который использовался только событием нажатия клавиши. Поскольку событие нажатия клавиши устарело, этот атрибут больше не был полезен и был удален.
  • События change (изменения), submit (отправки) и reset сброса были удалены, поскольку они были характерны для форм HTML и указаны в [HTML5].
  • Событие textInput, первоначально предложенное в качестве замены keypress, было удалено в пользу текущих событий beforeinput и input.
  • События в пространстве имен были удалены.
  • Обновлено для использования [WebIDL].
  • EventException был удален.

12. Благодарности

Многие люди внесли свой вклад в спецификации DOM (уровень 1, 2 или 3), включая участников рабочей группы DOM, группы интересов DOM, рабочей группы WebAPI и рабочей группы WebApps. Мы особенно благодарны следующим людям:

Andrew Watson (Object Management Group), Andy Heninger (IBM), Angel Diaz (IBM), Anne van Kesteren (Opera Software), Arnaud Le Hors (W3C and IBM), Arun Ranganathan (AOL), Ashok Malhotra (IBM and Microsoft), Ben Chang (Oracle), Bill Shea (Merrill Lynch), Bill Smith (Sun), Björn Höhrmann, Bob Sutor (IBM), Charles McCathie-Nevile (Opera Software, Co-Chair), Chris Lovett (Microsoft), Chris Wilson (Microsoft), Christophe Jolif (ILOG), David Brownell (Sun), David Ezell (Hewlett-Packard Company), David Singer (IBM), Dean Jackson (W3C, W3C Team Contact), Dimitris Dimitriadis (Improve AB and invited expert), Don Park (invited), Doug Schepers (Vectoreal), Elena Litani (IBM), Eric Vasilik (Microsoft), Gavin Nicol (INSO), Gorm Haug Eriksen (Opera Software), Ian Davis (Talis Information Limited), Ian Hickson (Google), Ian Jacobs (W3C), James Clark (invited), James Davidson (Sun), Jared Sorensen (Novell), Jeroen van Rotterdam (X-Hive Corporation), Joe Kesselman (IBM), Joe Lapp (webMethods), Joe Marini (Macromedia), John Robinson (AOL), Johnny Stenback (Netscape/AOL), Jon Ferraiolo (Adobe), Jonas Sicking (Mozilla Foundation), Jonathan Marsh (Microsoft), Jonathan Robie (Texcel Research and Software AG), Kim Adamson-Sharpe (SoftQuad Software Inc.), Lauren Wood (SoftQuad Software Inc., former Chair), Laurence Cable (Sun), Luca Mascaro (HTML Writers Guild), Maciej Stachowiak (Apple Computer), Marc Hadley (Sun Microsystems), Mark Davis (IBM), Mark Scardina (Oracle), Martin Dürst (W3C), Mary Brady (NIST), Michael Shenfield (Research In Motion), Mick Goulish (Software AG), Mike Champion (Arbortext and Software AG), Miles Sabin (Cromwell Media), Patti Lutsky (Arbortext), Paul Grosso (Arbortext), Peter Sharpe (SoftQuad Software Inc.), Phil Karlton (Netscape), Philippe Le Hégaret (W3C, W3C Team Contact and former Chair), Ramesh Lekshmynarayanan (Merrill Lynch), Ray Whitmer (iMall, Excite@Home, and Netscape/AOL, Chair), Rezaur Rahman (Intel), Rich Rollman (Microsoft), Rick Gessner (Netscape), Rick Jelliffe (invited), Rob Relyea (Microsoft), Robin Berjon (Expway, Co-Chair), Scott Hayman (Research In Motion), Scott Isaacs (Microsoft), Sharon Adler (INSO), Stéphane Sire (IntuiLab), Steve Byrne (JavaSoft), Tim Bray (invited), Tim Yu (Oracle), Tom Pixley (Netscape/AOL), T.V. Raman (Google). Vidur Apparao (Netscape) and Vinod Anupam (Lucent).

Бывшие редакторы:

Tom Pixley (Netscape Communications Corporation) until July 2002; Philippe Le Hégaret (W3C) until November 2003; Björn Höhrmann (Invited Expert) until January 2008; and Jacob Rossi (Microsoft) from March 2011 to October 2011.

Соучастники: В Рабочей группе WebApps следующие люди внесли существенный материальный вклад в процесс уточнения и пересмотра этой спецификации:

Bob Lund (Cable Laboratories), Cameron McCormack (Invited Expert / Mozilla), Daniel Danilatos (Google), Gary Kacmarcik (Google), Glenn Adams (Samsung), Hallvord R. M. Steen (Opera), Hironori Bono (Google), Mark Vickers (Comcast), Masayuki Nakano (Mozilla), Olli Pettay (Mozilla), Takayoshi Kochi (Google) and Travis Leithead (Microsoft).

Авторы глоссария:

Arnaud Le Hors (W3C) and Robert S. Sutor (IBM Research).

Участники тестового набора:

Carmelo Montanez (NIST), Fred Drake, Mary Brady (NIST), Neil Delima (IBM), Rick Rivello (NIST), Robert Clary (Netscape), со специальным упоминанием Курта Арнольда (Curt Arnold).

Спасибо всем, кто помог улучшить эту спецификацию, посылая предложения и исправления (пожалуйста, продолжайте сообщать нам о своих проблемах!) Или писать информативные книги или веб-сайты:

Al Gilman, Alex Russell, Alexander J. Vincent, Alexey Proskuryakov, Arkadiusz Michalski, Brad Pettit, Cameron McCormack, Chris Rebert, Curt Arnold, David Flanagan, Dylan Schiemann, Erik Arvidsson, Garrett Smith, Giuseppe Pascale, James Su, Jan Goyvaerts (regular-expressions.info), Jorge Chamorro, Kazuyuki Ashimura, Ken Rehor, Magnus Kristiansen, Martijn Wargers, Martin Dürst, Michael B. Allen, Mike Taylor, Misha Wolf, Ojan Vafai, Oliver Hunt, Paul Irish, Peter-Paul Koch, Richard Ishida, Sean Hogan, Sergey Ilinsky, Sigurd Lerstad, Steven Pemberton, Tony Chang, William Edney and Øistein E. Andersen.

13. Глоссарий

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

Поведение активации (activation behavior)

Действие, выполняемое, когда событие, обычно инициируемое пользователями через устройство ввода, заставляет элемент выполнить определенную задачу. Задача МОЖЕТ быть определена для этого элемента с помощью основного языка, или определяемых автором переменных, или обоих. Задача по умолчанию для любого данного элемента МОЖЕТ быть общим действием или МОЖЕТ быть уникальной для этого элемента. Например, поведение активации элемента HTML или SVG <a> заключается в том, чтобы пользовательский агент проходил по ссылке, указанной в атрибуте href, с дополнительным необязательным параметром, задающим контекст просмотра для обхода (например, текущее окно). или вкладка, именованное окно или новое окно). Поведение активации элемента HTML <input> со значением submit атрибута type заключается в отправке значений элементов формы в определенный пользователем IRI с помощью определенного HTTP-метода. Смотри §3.5 Триггеры активации и поведение для более подробной информации.

Триггеры активации (activation trigger)

Событие, которое определено для инициирования поведения активации. Обратитесь к §3.5 Триггеры активации и поведение для получения дополнительной информации.

Автор (author)

В контексте этой спецификации автор, автор контента или автор скрипта — это человек, который пишет скрипт или другой исполняемый контент, который использует интерфейсы, события и поток событий, определенные в этой спецификации. Смотри §1.2.3 Авторы контента и категорию соответствия контента для более подробной информации.

Элемент тела (body element)

В документах HTML или XHTML элемент body представляет содержимое документа. В правильно сформированном HTML-документе элемент body является первым потомком корневого элемента.

Фаза всплытия (bubbling phase)

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

Фаза захвата (capture phase)

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

Кандидаты в обработчики событий (candidate event handlers) и кандидаты в слушатели событий (candidate event listeners)

Список всех прослушивателей событий, которые были зарегистрированы на целевом объекте в порядке их регистрации. Когда событие собирается быть отправлено целевому объекту, список текущих прослушивателей захватывается до того, как какие-либо прослушиватели событий отправляются на целевой объект. Прослушиватели, которые добавляются после начала отправки события, не влияют на порядок прослушивателей в захваченном списке, хотя прослушиватели, которые удаляются после начала отправки, будут удалены.

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

Значение символа (character value)

В контексте ключевых значений символьное значение представляет собой строку, представляющую один или несколько символов Юникода, например букву или символ, или набор букв. В этом описании символьные значения обозначаются как строка в Юникоде (например, U + 0020) или как глиф-представление одной и той же кодовой точки (например, «») и имеют цветовую кодировку, чтобы помочь различать эти два представления.

В исходном коде некоторые ключевые значения, такие как неграфические символы, могут быть представлены с использованием escape-синтаксиса символов используемого языка программирования.

Текущая цель события (current event target)

В потоке событий текущая цель события — это объект, связанный с обработчиком событий, который в данный момент отправляется. Этот объект МОЖЕТ быть самой целью события или одним из его предков. Текущая цель события изменяется по мере того, как событие распространяется от объекта к объекту через различные фазы потока событий. Текущая цель события — это значение атрибута currentTarget.

Мёртвый ключ (dead key)

Мертвая клавиша — это клавиша или комбинация клавиш, которая сама по себе не производит никакого символа, но которая в комбинации или последовательности с другой клавишей производит модифицированный символ, такой как символ с диакритическими знаками (например, «ö», «é», « â «).

Действие по умолчанию (default action)

Действие по умолчанию — это ДОПОЛНИТЕЛЬНОЕ добавочное поведение, которое реализация ДОЛЖНА выполнить в сочетании с отправкой объекта события. Каждое определение типа события и каждая спецификация определяют действие по умолчанию для этого типа события, если оно есть. Экземпляр события МОЖЕТ иметь несколько действий по умолчанию при некоторых обстоятельствах, например, связанных с триггером активации. Действие по умолчанию МОЖЕТ быть отменено с помощью вызова метода protectDefault(). Для получения дополнительной информации смотри §3.2 Действия по умолчанию и отменяемые события.

Дельта (delta)

Предполагаемая величина прокрутки (в пикселях, строках или страницах), которую пользовательский агент будет прокручивать или масштабировать на странице в ответ на физическое перемещение устройства ввода, поддерживающего интерфейс WheelEvent (например, колесико мыши или сенсорную панель). Значение delta (например, атрибуты deltaX, deltaY или deltaZ) следует интерпретировать в контексте текущего свойства deltaMode. Соотношение между физическим движением колеса (или другого устройства) и положительным или отрицательным значением дельты зависит от среды и устройства. Однако, если пользовательский агент прокручивает как действие по умолчанию, то знак дельты задается правой системой координат, где положительные оси X, Y и Z направлены в направлении самого правого края, самого нижнего края и самая дальняя (от пользователя) глубина документа, соответственно.

Устаревшее (deprecated)

Функции, помеченные как устаревшие, включены в спецификацию в качестве ссылки на более старые реализации или спецификации, но являются ФАКУЛЬТАТИВНЫМИ и не приветствуются. В этой спецификации НЕОБХОДИМО исключать только те функции, которые имеют существующие или выполняемые замены. Реализации, которые еще не включают поддержку функции, МОГУТ реализовывать устаревшие функции по причинам обратной совместимости с существующим контентом, но создатели контента, создающие контент, НЕ ДОЛЖНЫ использовать устаревшие функции, если нет другого способа решения варианта использования. Другие спецификации, которые ссылаются на эту спецификацию, НЕ ДОЛЖНЫ использовать устаревшие функции, но ДОЛЖНЫ указывать на замены, которым эта функция не рекомендуется. Ожидается, что функции, отмеченные как устаревшие в данной спецификации, будут исключены из будущих спецификаций.

Отправка (dispatch)

Создать событие с атрибутами и методами, соответствующими его типу и контексту, и распространить его через дерево DOM указанным способом. Взаимозаменяемы с термином «fire», например, «инициируют событие click» или «отправляют событие load».

Документ (document)

Объект, создающий экземпляр интерфейса Document [DOM-Level-3-Core], представляющий весь текстовый документ HTML или XML. Концептуально он является корнем дерева документа и обеспечивает основной доступ к данным документа.

Приложение DOM (DOM application)

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

DOM Level 0

Термин DOM Level 0 относится к сочетанию функциональных возможностей HTML-документов, часто формально не указанных, но традиционно поддерживаемых как стандарты де-факто, изначально реализованные в Netscape Navigator версии 3.0 или Microsoft Internet Explorer версии 3.0. Во многих случаях атрибуты или методы были включены по причинам обратной совместимости с уровнем DOM 0.

Пустая строка (empty string)

Пустая строка — это значение типа DOMString длиной 0, то есть строка, которая не содержит символов (ни печатных, ни управляющих символов).

Событие (event)

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

Фокус события (event focus)

Фокус события — это особое состояние восприимчивости и концентрации на конкретном элементе или другой цели события в документе. Каждый элемент имеет разное поведение при фокусировке, в зависимости от его функциональности, например, запуска элемента для активации (как для кнопки или гиперссылки) или переключения состояния (как для флажка), получения ввода текста (как для поля текстовой формы), или копирование выбранного текста. Для получения дополнительной информации см. §4.2.3 Фокус документа и контекст фокуса.

Кольцо фокусировки события (event focus ring)

Кольцо фокуса события — это упорядоченный набор целей фокуса события в документе. Основной язык МОЖЕТ определять один или несколько способов определения порядка целей, таких как порядок документов, числовой индекс, определенный для цели фокуса, явные указатели между целями фокуса или гибрид различных моделей. Каждый документ МОЖЕТ содержать несколько фокусировочных колец или условных фокусировочных колец. Как правило, для упорядоченных или индексированных фокусировочных колец фокус переходит от последней цели фокусировки к первой.

Обработчик события (event handler), слушатель события (event listener)

Объект, который реализует интерфейс EventListener и предоставляет метод обратного вызова handleEvent(). Обработчики событий зависят от языка. Обработчики событий вызываются в контексте определенного объекта (текущей цели события) и предоставляются самим объектом события.

В JavaScript считается, что пользовательские функции реализуют интерфейс EventListener. Таким образом, объект события будет предоставлен в качестве первого параметра пользовательской функции при его вызове. Кроме того, объекты JavaScript также могут реализовывать интерфейс EventListener, когда они определяют метод handleEvent.

Порядок событий (event order)

Последовательность, в которой происходят события из одного и того же источника или процесса события с использованием одинаковых или связанных интерфейсов событий. Например, в среде с мышью, трекпадом и клавиатурой каждое из этих устройств ввода будет представлять собой отдельный источник событий, и каждое будет следовать своему собственному порядку событий. Событие mousedown с трекпада, за которым следует событие mouseup от мыши, не приведет к событию click.

Там могут быть взаимодействия между различными порядками событий. Например, событие click может быть изменено одновременным событием нажатия клавиши keydown (например, с помощью Shift + click). Тем не менее, порядок событий этих различных источников событий будет отличаться.

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

Фаза события (event phase)

Смотри «Фаза»

Цель события (event target)

Объект, на который нацелено событие, используя §3.1 Диспетчеризация событий и поток событий DOM. Цель события — это значение атрибута target.

Тип события (event type)

Тип события — это объект события с определенным именем, который определяет конкретные условия триггера, свойства и другие характеристики, которые отличают его от других типов событий. Например, тип события click имеет характеристики, отличные от типа события mouseover или load. Тип события отображается в виде атрибута type объекта события. См. §4 Типы событий для более подробной информации. Также условно обозначается как «событие», такое как событие click.

fire

Синоним для отправки.

Основной язык (host language)

Любой язык, который объединяет функции другого языка или спецификации API, но при этом нормативно ссылается на спецификацию источника, а не переопределяет эти функции и расширяет эти функции только способами, определенными спецификацией источника. Спецификация происхождения обычно предназначена для реализации только в контексте одного или нескольких основных языков, а не в качестве отдельного языка. Например, XHTML, HTML и SVG являются основными языками для событий пользовательского интерфейса, и они интегрируют и расширяют объекты и модели, определенные в этой спецификации.

Гистерезис (hysteresis)

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

Редактор методов ввода — IME (input method editor)

Редактор метода ввода (IME), также известный как интерфейсный процессор, — это приложение, которое выполняет преобразование между нажатиями клавиш и иероглифами или другими символами, обычно с помощью пользовательского поиска в словаре, часто используемого в восточноазиатских языках (например, китайском, Японский, Корейский). IME МОЖЕТ также использоваться для дополнения слов на основе словаря, например, на мобильных устройствах. См. §5.3.3 «Редакторы методов ввода» для обработки IME в данной спецификации. Смотрите также систему составления текста.

Сопоставление клвиш (key mapping)

Назначение клавиш — это процесс присвоения значения клавиши определенной клавише, который является результатом сочетания нескольких факторов, включая операционную систему и раскладку клавиатуры (например, QWERTY, Dvorak, Spanish, InScript, Chinese и т. д.) и после учета всех состояний клавиш-модификаторов (Shift, Alt и др.) и мертвых клавиш.

Значение клавиши (key value)

Значением клавиши является символьное значение или многосимвольная строка (например, «Enter», «Tab» или «MediaTrackNext»), связанная с ключом в определенном состоянии. Каждый ключ имеет значение ключа, независимо от того, имеет ли он символьное значение. Это включает в себя клавиши управления, функциональные клавиши, клавиши-модификаторы, мертвые клавиши и любые другие клавиши. Значение ключа любого данного ключа в любой момент времени зависит от сопоставления клавиш.

Локальное имя (local name)

Смотрите локальное имя в [XML-Names11].

Клавиша модификатор (modifier key)

Клавиша-модификатор изменяет нормальное поведение клавиши, например, для создания символа другого регистра (например, с помощью клавиши Shift) или для изменения функций, вызываемых клавишей (например, с помощью клавиш Fn или Alt). См. §5.3.1 «Клавиши-модификаторы» для получения дополнительной информации о клавишах-модификаторах и обратитесь к таблице «Клавиши-модификаторы» в [UIEvents-Key] для получения списка действительных клавиш-модификаторов.

URI пространства имен (namespace URI)

URI пространства имен — это URI, который идентифицирует пространство имен XML. Это называется именем пространства имен в [XML-Names11]. См. Также разделы 1.3.2 DOM URI и 1.3.3 пространства имен XML, касающиеся обработки и сравнения URI и URI пространства имен в API DOM.

Фаза (phase)

В контексте событий фаза представляет собой набор логических обходов от узла к узлу вдоль дерева DOM, от Window до объекта Document, корневого элемента и вплоть до цели события (фаза захвата), в самой цели события (целевая фаза) и резервная копия той же цепочки (пузырчатая фаза).

Путь распространения (propagation path)

Упорядоченный набор текущих целей событий, хотя объект события будет проходить последовательно на пути к цели и обратно от цели события. По мере распространения события каждая текущая цель события на пути распространения, в свою очередь, устанавливается как currentTarget. Путь распространения изначально составлен из одной или нескольких фаз события, как определено типом события, но МОЖЕТ быть прерван. Также известный как цепочка целей событий.

QWERTY

QWERTY (произносится ˈkwɜrti) — это обычная раскладка клавиатуры, названная так потому, что первые пять символьных клавиш в верхнем ряду буквенных клавиш — это Q, W, E, R, T и Y. Существует много других популярных раскладок клавиатуры (включая Макеты Dvorak и Colemak), наиболее предназначенные для локализации или эргономики.

Корневой элемент (root element)

Первый узел элемента документа, все остальные элементы которого являются дочерними. Элемент документа.

Вращение (rotation)

Индикация постепенного изменения на устройстве ввода с использованием интерфейса WheelEvent. На некоторых устройствах это МОЖЕТ быть буквальным вращением колеса, в то время как на других это МОЖЕТ быть движением по плоской поверхности или нажатием на определенную кнопку.

Целевая фаза (target phase)

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

Система текстовой композиции (text composition system)

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

Самая верхняя цель события (topmost event target)

Самая верхняя цель события ДОЛЖНА быть самым высоким элементом в порядке рендеринга, который может быть целью события. В графических интерфейсах пользователя это элемент указательного устройства пользователя. Средство тестирования попаданий пользовательского интерфейса используется для определения цели. Конкретные сведения о проверке попаданий и порядке их размещения см. На языке хоста.

Дерево (tree)

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

Категории символов Юникода (Unicode character categories)

Подмножество значений общей категории, которые определены для каждой кодовой точки Unicode. Это подмножество содержит все буквы (Ll, Lm, Lo, Lt, Lu), число (Nd, Nl, No), знаки пунктуации (Pc, Pd, Pe, Pf, Pi, Po, Ps) и символ (Sc, Sk, Sm, So) значения категории.

Неинициализированное значение (un-initialized value)

Значение любого атрибута события (такого как bubbles или currentTarget) до того, как событие было инициализировано с помощью initEvent(). Неинициализированные значения события применяются сразу после создания нового события с помощью метода createEvent().

Пользовательский агент (user agent)

Программа, такая как браузер или средство создания контента, обычно работающая на клиентском компьютере, которая действует от имени пользователя при получении, интерпретации, выполнении, представлении или создании контента. Пользователи МОГУТ действовать в отношении контента с использованием разных пользовательских агентов в разное время для разных целей. См. §1.2.1 веб-браузеры и другие динамические или интерактивные пользовательские агенты и §1.2.2 Инструменты разработки для получения подробной информации о требованиях к соответствующему пользовательскому агенту.

Объект Window

Window — это объект, на который ссылается объект Window Proxy контекста просмотра текущего документа, как определено в HTML5 [HTML5]. (http://dev.w3.org/html5/spec/single-page.html#windowproxy)

Соответствие

Требования соответствия выражены комбинацией описательных утверждений и терминологии RFC 2119. Ключевые слова «ДОЛЖНЫ», «НЕ ДОЛЖНЫ», «НЕОБХОДИМЫ», «НЕ ДОЛЖНЫ», «НЕ ДОЛЖНЫ», «СЛЕДУЕТ», «НЕ СЛЕДУЕТ», «РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и «ДОПОЛНИТЕЛЬНО» в нормативных частях. этого документа следует интерпретировать, как описано в RFC 2119. Однако для удобства чтения эти слова не отображаются заглавными буквами в данном описании.

Весь текст этой спецификации является нормативным, за исключением разделов, явно помеченных как ненормативные, примеры и примечания. [RFC2119]

Примеры в этой спецификации вводятся со словами «например» или отделены от нормативного текста с помощью class = «example», например так:

 

Пример № 37

Это пример информативного примера.

 

Информационные примечания начинаются со слова «Примечание» и отделены от нормативного текста с помощью class = «note», например:

Обратите внимание, это информационная заметка.

Индекс

Термины, определенные настоящей спецификацией

Термины, определяемые ссылкой

[DOM] определяет следующие термины:

  • CustomEvent
  • Document
  • Event
  • EventInit
  • EventListener
  • EventTarget
  • MutationEvent
  • bubbles
  • cancelable
  • createEvent(interface)
  • currentTarget
  • defaultPrevented
  • dispatchEvent(event)
  • handleEvent
  • handleEvent(event)
  • initEvent(type)
  • isTrusted
  • preventDefault()
  • stopImmediatePropagation()
  • stopPropagation()
  • target
  • timeStamp
  • type

[HTML] определяет следующие термины:

  • Window
  • input
  • textarea

[SVG2] определяет следующие термины:

  • x

[uievents] определяет следующие термины:

  • which

[UIEvents-Key] определяет следующие термины:

  • key attribute value
  • modifier keys table

[WebIDL] определяет следующие термины:

  • DOMString
  • Exposed
  • boolean
  • double
  • long
  • short
  • unsigned long
  • unsigned short

Ссылки

Нормативные ссылки

[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/

[DOM-Level-2-Events]
Tom Pixley. Document Object Model (DOM) Level 2 Events Specification. 13 November 2000. REC. URL: https://www.w3.org/TR/DOM-Level-2-Events/

[DOM-Level-3-Core]
Arnaud Le Hors; et al. Document Object Model (DOM) Level 3 Core Specification. 7 April 2004. REC. URL: https://www.w3.org/TR/DOM-Level-3-Core/

[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/

[HTML5]
Ian Hickson; et al. HTML5. 27 March 2018. REC. URL: https://www.w3.org/TR/html5/

[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119

[SVG2]
Nikos Andronikos; et al. Scalable Vector Graphics (SVG) 2. 15 September 2016. CR. URL: https://www.w3.org/TR/SVG2/

[UIEVENTS]
Gary Kacmarcik; Travis Leithead. UI Events. 4 August 2016. WD. URL: https://www.w3.org/TR/uievents/

[UIEvents-Code]
Gary Kacmarcik; Travis Leithead. UI Events KeyboardEvent code Values. 1 June 2017. CR. URL: https://www.w3.org/TR/uievents-code/

[UIEvents-Key]
Gary Kacmarcik; Travis Leithead. UI Events KeyboardEvent key Values. 1 June 2017. CR. URL: https://www.w3.org/TR/uievents-key/

[WebIDL]
Cameron McCormack; Boris Zbarsky; Tobie Langel. Web IDL. 15 December 2016. ED. URL: https://heycam.github.io/webidl/

Информационные ссылки

[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 7 June 2011. REC. URL: https://www.w3.org/TR/CSS2/

[DWW95]
N. Kano. Developing International Software for Windows 95 and Windows NT: A Handbook for International Software Design. 1995.

[Editing]
A. Gregor. HTML Editing APIs. URL: https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html

[HTML401]
Dave Raggett; Arnaud Le Hors; Ian Jacobs. HTML 4.01 Specification. 27 March 2018. REC. URL: https://www.w3.org/TR/html401/

[Input-Events]
Johannes Wilm; Ben Peters. Input Events Level 1. 5 September 2017. WD. URL: https://www.w3.org/TR/input-events-1/

[RFC20]
V.G. Cerf. ASCII format for network interchange. October 1969. Internet Standard. URL: https://tools.ietf.org/html/rfc20

[UAAG20]
James Allan; et al. User Agent Accessibility Guidelines (UAAG) 2.0. 15 December 2015. NOTE. URL: https://www.w3.org/TR/UAAG20/

[UAX15]
Mark Davis; Ken Whistler. Unicode Normalization Forms. 26 May 2017. Unicode Standard Annex #15. URL: https://www.unicode.org/reports/tr15/tr15-45.html

[Unicode]
The Unicode Standard. URL: https://www.unicode.org/versions/latest/

[US-ASCII]
Coded Character Set — 7-Bit American Standard Code for Information Interchange. 1986.

[WIN1252]
Windows 1252 a Coded Character Set — 8-Bit. URL: http://www.microsoft.com/globaldev/reference/sbcs/1252.htm

[XFORMS11]
John Boyer. XForms 1.1. 20 October 2009. REC. URL: https://www.w3.org/TR/xforms11/

[XML-Names11]
Tim Bray; et al. Namespaces in XML 1.1 (Second Edition). 16 August 2006. REC. URL: https://www.w3.org/TR/xml-names11/

Индекс IDL

[Constructor(DOMString type, optional UIEventInit eventInitDict), Exposed=Window]
interface UIEvent : Event {
readonly attribute Window? view;
readonly attribute long detail;
};

 

dictionary UIEventInit : EventInit {
Window? view = null;
long detail = 0;
};

 

[Constructor(DOMString type, optional FocusEventInit eventInitDict), Exposed=Window]
interface FocusEvent : UIEvent {
readonly attribute EventTarget? relatedTarget;
};

 

dictionary FocusEventInit : UIEventInit {
EventTarget? relatedTarget = null;
};

 

[Constructor(DOMString type, optional MouseEventInit eventInitDict), Exposed=Window]
interface MouseEvent : UIEvent {
readonly attribute long screenX;
readonly attribute long screenY;
readonly attribute long clientX;
readonly attribute long clientY;

 

readonly attribute boolean ctrlKey;
readonly attribute boolean shiftKey;
readonly attribute boolean altKey;
readonly attribute boolean metaKey;

 

readonly attribute short button;
readonly attribute unsigned short buttons;

 

readonly attribute EventTarget? relatedTarget;

 

boolean getModifierState(DOMString keyArg);
};

 

dictionary MouseEventInit : EventModifierInit {
long screenX = 0;
long screenY = 0;
long clientX = 0;
long clientY = 0;

short button = 0;
unsigned short buttons = 0;
EventTarget? relatedTarget = null;
};

dictionary EventModifierInit : UIEventInit {
boolean ctrlKey = false;
boolean shiftKey = false;
boolean altKey = false;
boolean metaKey = false;

boolean modifierAltGraph = false;
boolean modifierCapsLock = false;
boolean modifierFn = false;
boolean modifierFnLock = false;
boolean modifierHyper = false;
boolean modifierNumLock = false;
boolean modifierScrollLock = false;
boolean modifierSuper = false;
boolean modifierSymbol = false;
boolean modifierSymbolLock = false;
};

[Constructor(DOMString type, optional WheelEventInit eventInitDict), Exposed=Window]
interface WheelEvent : MouseEvent {
// DeltaModeCode
const unsigned long DOM_DELTA_PIXEL = 0x00;
const unsigned long DOM_DELTA_LINE = 0x01;
const unsigned long DOM_DELTA_PAGE = 0x02;

readonly attribute double deltaX;
readonly attribute double deltaY;
readonly attribute double deltaZ;
readonly attribute unsigned long deltaMode;
};

dictionary WheelEventInit : MouseEventInit {
double deltaX = 0.0;
double deltaY = 0.0;
double deltaZ = 0.0;
unsigned long deltaMode = 0;
};

[Constructor(DOMString type, optional InputEventInit eventInitDict), Exposed=Window]
interface InputEvent : UIEvent {
readonly attribute DOMString? data;
readonly attribute boolean isComposing;
readonly attribute DOMString inputType;
};

dictionary InputEventInit : UIEventInit {
DOMString? data = "";
boolean isComposing = false;
DOMString inputType = "";
};

[Constructor(DOMString type, optional KeyboardEventInit eventInitDict), Exposed=Window]
interface KeyboardEvent : UIEvent {
// KeyLocationCode
const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;
const unsigned long DOM_KEY_LOCATION_RIGHT = 0x02;
const unsigned long DOM_KEY_LOCATION_NUMPAD = 0x03;

readonly attribute DOMString key;
readonly attribute DOMString code;
readonly attribute unsigned long location;

readonly attribute boolean ctrlKey;
readonly attribute boolean shiftKey;
readonly attribute boolean altKey;
readonly attribute boolean metaKey;

readonly attribute boolean repeat;
readonly attribute boolean isComposing;

boolean getModifierState(DOMString keyArg);
};

dictionary KeyboardEventInit : EventModifierInit {
DOMString key = "";
DOMString code = "";
unsigned long location = 0;
boolean repeat = false;
boolean isComposing = false;
};

[Constructor(DOMString type, optional CompositionEventInit eventInitDict), Exposed=Window]
interface CompositionEvent : UIEvent {
readonly attribute DOMString data;
};

dictionary CompositionEventInit : UIEventInit {
DOMString data = "";
};

partial interface UIEvent {
// The following support legacy user agents
readonly attribute unsigned long which;
};

partial interface KeyboardEvent {
// The following support legacy user agents
readonly attribute unsigned long charCode;
readonly attribute unsigned long keyCode;
};