Кратко
СкопированоСобытие input
возникает, когда пользователь изменяет содержимое поля для ввода информации.
Примеры таких полей:
<textarea>
;<input>
с текстовым содержимым (атрибутыtype
или= "text" type
);= "number" <input>
с нетекстовым содержимым (атрибутыtype
или= "file" type
);= "image" <input>
в виде чекбокса (type
) или радиокнопки (= "checkbox" type
);= "radio" <select>
.
Событие input
возникает, когда DOM-дерево обновляется или вот-вот обновится. Если пользователь вставит текст из буфера обмена, то событие input
возникнет один раз. Если же пользователь печатает текст, то событие input
возникает после добавления и удаления каждого символа.
Простой пример
Скопировано<label> Введите текст: <input type="text" id="textField"></label><label> При каждом изменении возникает событие <code>input</code>: <textarea disabled id="textResult"></textarea></label><script> var inputTextField = document.getElementById('textField') var outputTextField = document.getElementById('textResult') inputTextField.oninput = function() { outputTextField.value = inputTextField.value }</script>
<label> Введите текст: <input type="text" id="textField"> </label> <label> При каждом изменении возникает событие <code>input</code>: <textarea disabled id="textResult"></textarea> </label> <script> var inputTextField = document.getElementById('textField') var outputTextField = document.getElementById('textResult') inputTextField.oninput = function() { outputTextField.value = inputTextField.value } </script>
Как пишется
Скопированоconst textInput = document.querySelector('input[type=text]')function callback(evt) { console.log(`Произошло событие ${evt.type}`)}textInput.addEventListener('input', callback)
const textInput = document.querySelector('input[type=text]') function callback(evt) { console.log(`Произошло событие ${evt.type}`) } textInput.addEventListener('input', callback)
Если ввести в текстовое поле слово «Дока» и щёлкнуть вне этого поля, в консоли будут показаны сообщения: «4 раза: Произошло событие input
».
Отличие от события change
СкопированоСобытия input
и change
похожи — оба помогают отслеживать изменения в полях ввода.
Различие есть для текстовых полей ввода:
input
— срабатывает при каждом изменении значения в поле;change
— срабатывает, когда изменяемый элемент теряет фокус. Например, при переходе к другому полю или клику на другую часть страницы.
Для прочих полей ввода они работают одинаково:
<label> Кликните: <input type="checkbox" name="checkbox-input"></label><label> Типы событий: <textarea disabled name="checkbox-result"></textarea></label><script> const checkbox = document.querySelector('[name=checkbox-input]') const textArea = document.querySelector('[name=checkbox-result]') function handleCheckboxChange(evt) { textArea.value += evt.type + '; ' } checkbox.addEventListener('input', handleCheckboxChange) checkbox.addEventListener('change', handleCheckboxChange)</script>
<label> Кликните: <input type="checkbox" name="checkbox-input"> </label> <label> Типы событий: <textarea disabled name="checkbox-result"></textarea> </label> <script> const checkbox = document.querySelector('[name=checkbox-input]') const textArea = document.querySelector('[name=checkbox-result]') function handleCheckboxChange(evt) { textArea.value += evt.type + '; ' } checkbox.addEventListener('input', handleCheckboxChange) checkbox.addEventListener('change', handleCheckboxChange) </script>
Примечания
СкопированоСобытие input
не произойдёт, если:
- текст не меняется, например, при нажатиях клавиш влево ⇦, вправо ⇨, Control, Alt, Shift;
- тег
<input>
имеет атрибутtype
или= "button" type
;= "submit" - поле изменит не пользователь, а JavaScript-код. Чтобы в этом случае получить событие
input
, нужны дополнительные действия. К примеру, использоватьdispatch
.Event ( )