- События Формы
- Событие отправки формы
- Очистка полей формы
- Невалидность полей формы
- События input, textarea
- События select
- События checkbox / radio
- События range
- Изменение: change, input, cut, copy, paste
- Событие change
- Событие input
- IE10-, событие propertychange
- События cut, copy, paste
- Пример: поле с контролем СМС
- IE9-
- Итого
- Задачи
- Автовычисление процентов по вкладу
- Комментарии
- HTML DOM InputEvent
- Input Events
- InputEvent Properties
- InputEvent Methods
- Inherited Properties and Methods
- COLOR PICKER
- Report Error
- Thank You For Helping Us!
События Формы
Рассмотрим основные события форм: отправка формы, очистка полей, фокус элемента формы, потеря фокуса, события для input, select, checkbox и многое другое.
Событие отправки формы
Слушать событие отправки формы можно при помощи submit .
Чтобы поймать событие отправки формы, используйте submit .
my_form.addEventListener("submit", () => < console.log("Событие отправки формы") >)
Очистка полей формы
Событие очистки полей формы.
my_form.addEventListener("reset", () => < console.log("Событие очистки полей формы") >)
Метод для очистки полей формы.
Невалидность полей формы
Событие invalid срабатывает при попытке отправить форму, когда одно или несколько полей формы неверно заполнены. Или не заполнены, когда поле имеет атрибут required .
my_form.addEventListener("invalid", (e) => < console.log("Значения формы не валидны"); >, true)
Как реализовать проверку правильности ввода данных, можете прочитать в статье про валидацию input.
События input, textarea
На input и textarea можно слушать следующие события:
- input — событие ввода
- change — событие изменения input (срабатывает после изменения поля и потери фокуса);
- focus — выбор элемента, фокус;
- blur — потеря фокуса;
- select — выделение текста;
- keyup — событие отпускание кнопки;
- contextmenu — правый щелчок мыши.
const inputs = document.querySelectorAll(".form-events input"); inputs.forEach(el => < el.addEventListener("change", function () < // ваш код >) >);
Посмотреть когда срабатывают основные события форм, можете ниже.
События select
Для элемента select можем отслеживать следующие события:
- change — выбор элемента из списка (option);
- focus — фокус на select;
- blur — потеря фокуса select.
my_select.addEventListener("change", () => console.log("Выбран пункт из списка select"));
В примере ниже посмотрите, когда какие события срабатывают для элемента формы select .
Если вам интересно как стилизуется select, вот ссылка на статью.
События checkbox / radio
Для checkbox / radio можно использовать следующие события:
checkb.addEventListener("change", () => console.log(checkb.value)); radio.addEventListener("click", () => console.log(radio.value));
Здесь вам пригодятся знания, как проверить состояние чекбокса.
События range
Для input type range используют следующие события:
- change — происходит в момент отпускания кнопки;
- input — происходит в режиме реального времени.
range.addEventListener("change", () => console.log(range.value));
Изменение: change, input, cut, copy, paste
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/events-change-input.
На элементах формы происходят события клавиатуры и мыши, но есть и несколько других, особенных событий.
Событие change
Событие change происходит по окончании изменения значения элемента формы, когда это изменение зафиксировано.
Для текстовых элементов это означает, что событие произойдёт не при каждом вводе, а при потере фокуса.
Например, пока вы набираете что-то в текстовом поле ниже – события нет. Но как только вы уведёте фокус на другой элемент, например, нажмёте кнопку – произойдёт событие onchange .
Для остальных же элементов: select , input type=checkbox/radio оно срабатывает сразу при выборе значения.
В IE8- checkbox/radio при изменении мышью не инициируют событие сразу, а ждут потери фокуса.
Для того, чтобы видеть изменения checkbox/radio тут же – в IE8- нужно повесить обработчик на событие click (оно произойдёт и при изменении значения с клавиатуры) или воспользоваться событием propertychange , описанным далее.
Событие input
Событие input срабатывает тут же при изменении значения текстового элемента и поддерживается всеми браузерами, кроме IE8-.
В IE9 оно поддерживается частично, а именно – не возникает при удалении символов (как и onpropertychange ).
Пример использования (не работает в IE8-):
В современных браузерах oninput – самое главное событие для работы с элементом формы. Именно его, а не keydown/keypress следует использовать.
Если бы ещё не проблемы со старыми IE… Впрочем, их можно решить при помощи события propertychange .
IE10-, событие propertychange
Это событие происходит только в IE10-, при любом изменении свойства. Оно позволяет отлавливать изменение тут же. Оно нестандартное, и его основная область использования – исправление недочётов обработки событий в старых IE.
Если поставить его на checkbox в IE8-, то получится «правильное» событие change :
Чекбокс с "onchange", работающим везде одинаково
Это событие также срабатывает при изменении значения текстового элемента. Поэтому его можно использовать в старых IE вместо oninput .
К сожалению, в IE9 у него недочёт: оно не срабатывает при удалении символов. Поэтому сочетания onpropertychange + oninput недостаточно, чтобы поймать любое изменение поля в старых IE. Далее мы рассмотрим пример, как это можно сделать иначе.
События cut, copy, paste
Эти события используются редко. Они происходят при вырезании/вставке/копировании значения.
К сожалению, кросс-браузерного способа получить данные, которые вставляются/копируются, не существует, поэтому их основное применение – это отмена соответствующей операции.
Пример: поле с контролем СМС
Как видим, событий несколько и они взаимно дополняют друг друга.
Посмотрим, как их использовать, на примере.
Сделаем поле для СМС, рядом с которым должно показываться число символов, обновляющееся при каждом изменении поля.
Событие input идеально решит задачу во всех браузерах, кроме IE9-. Собственно, если IE9- нам не нужен, то на этом можно и остановиться.
IE9-
В IE8- событие input не поддерживается, но, как мы видели ранее, есть onpropertychange , которое может заменить его.
Что же касается IE9 – там поддерживаются и input и onpropertychange , но они оба не работают при удалении символов. Поэтому мы будем отслеживать удаление при помощи keyup на Delete и BackSpace . А вот удаление командой «вырезать» из меню – сможет отловить лишь oncut .
Получается вот такая комбинация:
sms.onkeyup = sms.oninput = showCount; sms.onpropertychange = function() < if (event.propertyName == "value") showCount(); >sms.oncut = function() < setTimeout(showCount, 0); // на момент oncut значение ещё старое >;
Здесь мы добавили вызов showCount на все события, которые могут приводить к изменению значения. Да, иногда изменение будет обрабатываться несколько раз, но зато с гарантией. А лишние вызовы легко убрать, например, при помощи throttle -декоратора, описанного в задаче Тормозящий (throttling) декоратор.
Есть и совсем другой простой, но действенный вариант: через setInterval регулярно проверять значение и, если оно слишком длинное, обрезать его.
Чтобы сэкономить ресурсы браузера, мы можем начинать отслеживание по onfocus , а прекращать – по onblur , вот так:
>, 20); >; sms.onblur = function() < clearInterval(timerId); >; function showCount()
Обратим внимание – весь этот «танец с бубном» нужен только для поддержки IE8-, в которых не поддерживается oninput и IE9, где oninput не работает при удалении.
Итого
Событие | Описание | Особенности |
---|---|---|
change | Изменение значения любого элемента формы. Для текстовых элементов срабатывает при потере фокуса. | В IE8- на чекбоксах ждёт потери фокуса, поэтому для мгновенной реакции ставят также onclick -обработчик или onpropertychange . |
input | Событие срабатывает только на текстовых элементах. Оно не ждёт потери фокуса, в отличие от change . | В IE8- не поддерживается, в IE9 не работает при удалении символов. |
propertychange | Только для IE10-. Универсальное событие для отслеживания изменения свойств элементов. Имя изменённого свойства содержится в event.propertyName . Используют для мгновенной реакции на изменение значения в старых IE. | В IE9 не срабатывает при удалении символов. |
cut/copy/paste | Срабатывают при вставке/копировании/удалении текста. Если в их обработчиках отменить действие браузера, то вставки/копирования/удаления не произойдёт. | Вставляемое значение получить нельзя: на момент срабатывания события в элементе всё ещё старое значение, а новое недоступно. |
Ещё особенность: в IE8- события change , propertychange , cut и аналогичные не всплывают. То есть, обработчики нужно назначать на сам элемент, без делегирования.
Задачи
Автовычисление процентов по вкладу
Создайте интерфейс для автоматического вычисления процентов по вкладу.
Ставка фиксирована: 12% годовых. При включённом поле «капитализация» – проценты приплюсовываются к сумме вклада каждый месяц (сложный процент).
- В поле с суммой должно быть нельзя ввести не-цифру. При этом пусть в нём работают специальные клавиши и сочетания Ctrl-X/Ctrl-V.
- Изменения в форме отражаются в результатах сразу.
Только численный ввод в поле с суммой разрешаем, повесив обработчик на keypress .
Отслеживаем события изменения для перевычисления результатов:
- На input : событие input и дополнительно propertychange/keyup для совместимости со старыми IE.
- На checkbox : событие click вместо change для совместимости с IE8-.
- На select : событие change .
Комментарии
- Если вам кажется, что в статье что-то не так — вместо комментария напишите на GitHub.
- Для одной строки кода используйте тег , для нескольких строк кода — тег , если больше 10 строк — ссылку на песочницу (plnkr, JSBin, codepen…)
- Если что-то непонятно в статье — пишите, что именно и с какого места.
HTML DOM InputEvent
The InputEvent Object handles events that occur when an input element is changed.
Input Events
InputEvent Properties
Property | Returns |
---|---|
data | The inserted characters |
dataTransfer | An object containing information about the inserted/deleted data |
inputType | The type of the change (i.e «inserting» or «deleting») |
isComposing | If the state of the event is composing or not |
InputEvent Methods
Method | Returns |
---|---|
getTargetRanges() | An array containing target ranges that will be affected by the insertion/deletion |
Inherited Properties and Methods
The InputEvent inherits all the properties and methods from:
COLOR PICKER
Report Error
If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:
Thank You For Helping Us!
Your message has been sent to W3Schools.
Top Tutorials
Top References
Top Examples
Get Certified
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.