Почему не скомпонованы события изменения ввода флажка? - PullRequest
2 голосов
/ 10 апреля 2020

Я обнаружил, что для change событий, сгенерированных <input type="checkbox">, composed имеет значение false (по крайней мере, Chrome 80).

Флаг Event.composed определяет, является ли события распространяются через теневые границы DOM. Документация для Event.composed в Mozilla (https://developer.mozilla.org/en-US/docs/Web/API/Event/composed) гласит:

Составляются все события пользовательского интерфейса, отправленные UA (щелчок / касание / наведение курсора / копирование / вставка, и т. Д. c.).

Итак, является ли composed = false ожидаемым поведением для событий изменения ввода?

Документировано ли это в spe c (я пытался безуспешно) чтобы найти его)?

Если это ожидаемое поведение, каково обоснование для composed = false для change, но composed = true для, скажем, click?

Спасибо, Адам

1 Ответ

0 голосов
/ 11 апреля 2020

Из этой статьи дословно взято следующее: Shadow DOM v1: Автономные веб-компоненты | Веб-основы


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

События, которые пересекают границу тени:

  • События фокуса: размытие, фокус, фокусировка, фокусировка
  • События мыши: щелчок, dblclick, mousedown, mouseenter, mousemove, et c.
  • События колеса: wheel
  • Входные события: beforeinput, ввод
  • События клавиатуры : keydown, keyup
  • События композиции: запуск композиции, обновление композиции, конец композиции
  • DragEvent: запуск, перетаскивание, перетаскивание, падение и т. д. c.

Что касается спецификаций, событие изменения не является экземпляром InputEvent или UIEvent: https://www.w3.org/TR/uievents/#events -inputevents . Это экземпляр Event.

Что касается обоснования того, почему он не выходит из Shadow DOM, боюсь, я не могу предложить что-то наверняка. Все, что я могу сказать, это то, что событие change не относится непосредственно к действию пользователя, как это делает событие input, а скорее относится к изменению значения HTMLElement. Я полагаю, что только события, рассматриваемые действиями пользователя, должны вспыхивать.


Изменить, чтобы включить дополнительные ссылки:

Вот обсуждение, окружающее обоснование изменения в spe c: https://github.com/w3c/webcomponents/issues/513

...