Элемент: событие beforeinput
Базовая линия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Событие DOM beforeinput срабатывает, когда значение элемента <input> или <textarea> собирается измениться. Однако в отличие от события input, оно не срабатывает для элемента <select>. Событие также применяется к элементам с включённым contenteditable и к любому элементу, когда включён designMode.
Это позволяет веб-приложениям переопределять поведение редактирования текста до того, как браузер изменит дерево DOM, и обеспечивает больший контроль над событиями ввода для повышения производительности.
В случае contenteditable и designMode, целевым объектом события является **элемент-хост редактирования**. Если эти свойства применяются к нескольким элементам, элементом-хостом редактирования является ближайший родительский элемент, чьим родителем не является элемент для редактирования.
Примечание: Не каждое изменение, вносимое пользователем, приводит к срабатыванию события beforeinput. Также событие может сработать, но быть неотменяемым. Это может произойти, когда изменение выполняется автозаполнением, при принятии исправления от словаря, при автозаполнении менеджером паролей, IME или другими способами. Подробности различаются в зависимости от браузера и операционной системы. Чтобы переопределить поведение редактирования во всех ситуациях, код должен обрабатывать событие input и, возможно, отменить любые изменения, которые не были обработаны обработчиком beforeinput. См. ошибки 1673558 и 1763669.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или установите свойство обработчика события.
addEventListener("beforeinput", (event) => {});
onbeforeinput = (event) => {};
Тип события
Объект InputEvent. Наследуется от UIEvent.
Свойства события
Этот интерфейс наследует свойства от своих родительских элементов, UIEvent и Event.
-
InputEvent.dataТолько для чтения -
Возвращает строку с вставленными символами. Может быть пустой строкой, если изменение не вставляет текст (например, при удалении символов).
-
InputEvent.dataTransferТолько для чтения -
Возвращает объект
DataTransfer, содержащий информацию о форматированном или простом тексте, добавляемом или удаляемом из редактируемого содержимого. -
InputEvent.inputTypeТолько для чтения -
Возвращает тип изменения редактируемого содержимого, например, вставка, удаление или форматирование текста.
-
InputEvent.isComposingТолько для чтения -
Возвращает значение
Boolean, указывающее, срабатывает ли событие послеcompositionstartи передcompositionend.
Примеры
Обнаружение функции
Следующая функция возвращает true, если beforeinput, а значит, getTargetRanges, поддерживается.
function isBeforeInputEventAvailable() {
return (
window.InputEvent &&
typeof InputEvent.prototype.getTargetRanges === "function"
);
}
Простой логировщик
Этот пример записывает текущее значение элемента непосредственно перед заменой этого значения новым значением, применённым к элементу <input>.
HTML
<input placeholder="Enter some text" name="name" /> <p id="values"></p>
JavaScript
const input = document.querySelector("input");
const log = document.getElementById("values");
input.addEventListener("beforeinput", updateValue);
function updateValue(e) {
log.textContent = e.target.value;
}
Результат
Спецификации
| Спецификация |
|---|
| События UI # event-type-beforeinput |
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
beforeinput_event |
60 | 79 | 87 | 47 | 10.1 | 60 | 87 | 44 | 10.3 | 8.0 | 60 |
См. также
- Связанное событие:
input
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/beforeinput_event