Событие >“change” для текстового поля не срабатывает каждый раз при вводе одного символа. Оно срабатывает после потери полем фокуса, когда его значение было изменено. Чтобы мгновенно реагировать на изменение текстового поля нужно зарегистрировать событие >“input”, которое срабатывает каждый раз при вводе символа, удалении текста или других манипуляциях с содержимым поля.
В следующем примере мы видим текстовое поле и счётчик, показывающий текущую длину введённого текста.
> length: 0
>
> var text = document.querySelector("input");
> var output = document.querySelector("#length");
> text.addEventListener("input", function() {
> output.textContent = text.value.length;
> });
>
Галочки и радиокнопки
Поле галочки – простой бинарный переключатель. Его значение можно извлечь или поменять через свойство >checked, содержащее булевскую величину.
>
>
>
> var checkbox = document.querySelector("#purple");
Тег > используется для связи куска текста с полем ввода. Атрибут >for должен совпадать с >id поля. Щелчок по метке >label включает поле ввода, оно получает фокус и меняет значение – если это галочка или радиокнопка.
Радиокнопка схожа с галочкой, но она связана с другими радиокнопками с тем же именем, так что только одна из них может быть выбрана.
>Цвет:
> Фиолетовый
> Зелёный
> Голубой
>
> var buttons = document.getElementsByName("color");
Метод >document.getElementsByName выдаёт все элементы с заданным атрибутом >name. Пример перебирает их (посредством обычного цикла >for, а не >forEach, потому что возвращаемая коллекция – не настоящий массив) и регистрирует обработчик событий для каждого элемента. Помните, что у объектов событий есть свойство >target, относящееся к элементу, который запустил событие. Это полезно для создания обработчиков событий – наш обработчик может быть вызван разными элементами, и у него должен быть способ получить доступ к текущему элементу, который его вызвал.