Обработка событий изменения

Тренажер по работе с HTML DOM на JavaScript для пользователей с начальным и средним уровнем подготовки.

Тренажер JavaScript: Покоряем HTML DOM

В этом тренажере вы попрактикуетесь в обработке событий изменения, которые происходят в элементах HTML-формы. Вам будут представлены различные сценарии, где нужно будет реагировать на изменения значений в текстовых полях, выпадающих списках, чекбоксах и других элементах управления. В каждом задании будет предоставлен HTML-код и частично написанный JavaScript-код. Ваша задача - дополнить JavaScript-код, чтобы он корректно обрабатывал события и выполнял требуемые действия. Внимательно читайте условия заданий и используйте свои знания JavaScript и DOM, чтобы найти правильные решения.

Список тем

Изменение текста в поле ввода

В этом задании у вас есть текстовое поле и абзац. Когда пользователь вводит текст в поле и убирает с него фокус (например, щелкая мышью в другом месте страницы), содержимое абзаца должно обновляться, отображая введенный текст. Вам нужно добавить обработчик события, который будет отслеживать изменения в текстовом поле и обновлять текст абзаца.

HTML
Восстановить HTML
<input type="text" id="myInput">
<p id="myParagraph"></p>
JavaScript
document.getElementById("myInput").addEventListener(input__1, function(event) {
  document.getElementById("myParagraph").textContent = input__2;
});
Используйте событие `change` для текстового поля. В обработчике события получите значение текстового поля (`event.target.value`) и присвойте его свойству `textContent` абзаца.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Изменение цвета фона при выборе из списка

У вас есть выпадающий список (`select`) с несколькими вариантами цветов. Когда пользователь выбирает другой цвет из списка, цвет фона абзаца должен изменяться на выбранный цвет. Допишите JavaScript-код, чтобы реализовать это поведение.

HTML
Восстановить HTML
<select id="colorSelect">
  <option value="red">Красный</option>
  <option value="green">Зеленый</option>
  <option value="blue">Синий</option>
</select>
<p id="colorParagraph">Этот текст меняет цвет фона</p>
JavaScript
document.getElementById("colorSelect").addEventListener(input__1, function(event) {
  document.getElementById("colorParagraph").input__2.backgroundColor = event.target.input__3;
});
Используйте событие `change` для элемента `select`. В обработчике получите выбранное значение (`event.target.value`) и используйте его для изменения свойства `style.backgroundColor` абзаца.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Переключение класса при установке/снятии флажка

У вас есть чекбокс и абзац. Когда чекбокс отмечен, абзацу должен добавляться класс `highlight`. Когда чекбокс не отмечен, класс `highlight` должен удаляться. Вам нужно написать обработчик события `change` для чекбокса, который будет управлять классом абзаца.

CSS
.highlight {
  background-color: yellow;
}
HTML
Восстановить HTML
<input type="checkbox" id="myCheckbox">
<p id="checkboxParagraph">Этот абзац выделяется</p>
JavaScript
document.getElementById("myCheckbox").addEventListener(input__1, function(event) {
  if (event.target.input__2) {
    document.getElementById("checkboxParagraph").classList.input__3("highlight");
  } else {
    document.getElementById("checkboxParagraph").classList.input__4("highlight");
  }
});
Используйте событие `change` для чекбокса. В обработчике проверяйте свойство `checked` чекбокса (`event.target.checked`). Если `checked` равно `true`, используйте `classList.add("highlight")` для абзаца. Если `checked` равно `false`, используйте `classList.remove("highlight")`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Обновление счетчика при вводе текста

Имеется текстовое поле и абзац, отображающий количество введенных символов. Каждый раз, когда пользователь вводит или удаляет символ в текстовом поле, счетчик в абзаце должен обновляться. Необходимо использовать событие, которое реагирует на каждое изменение содержимого текстового поля.

HTML
Восстановить HTML
<input type="text" id="myInput2">
<p id="counterParagraph">Символов: 0</p>
JavaScript
document.getElementById("myInput2").addEventListener(input__1, function(event) {
  document.getElementById("counterParagraph").textContent = "Символов: " + input__2.target.value.input__3;
});
Используйте событие `input` для текстового поля. В обработчике события получайте длину значения текстового поля (`event.target.value.length`) и присваивайте ее свойству `textContent` абзаца.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Отображение выбранного изображения

Есть выпадающий список с URL изображений и тег `<img>`. Когда пользователь выбирает URL из списка, соответствующее изображение должно отображаться в теге `<img>`. Реализуйте это, используя событие `change`.

HTML
Восстановить HTML
<select id="imageSelect">
 <option value="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png">Изображение 1</option>
 <option value="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png">Изображение 2</option>
 <option value="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png">Изображение 3</option>
</select>
<img id="myImage" src="" alt="Selected Image" width="300" height="300">
JavaScript
document.getElementById(input__1).addEventListener("change", function(event) {
 document.getElementById("myImage").src = input__2.target.value;
});
Используйте событие `change` для выпадающего списка. В обработчике получите значение выбранного элемента (`event.target.value`) и присвойте его атрибуту `src` тега `<img>`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Валидация email при вводе

Есть текстовое поле для ввода email и абзац для вывода сообщения об ошибке. При каждом изменении содержимого поля нужно проверять, является ли введенный текст корректным email-адресом. Если нет, выводить сообщение об ошибке в абзац. Если email корректный, сообщение об ошибке нужно убрать.

HTML
Восстановить HTML
<input type="text" id="emailInput">
<p id="emailError" style="color: red;"></p>
JavaScript
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
document.getElementById("emailInput").addEventListener(input__1, function(event) {
  const email = event.target.value;
  if (!input__2.test(email)) {
    document.getElementById("emailError").textContent = input__3;
  } else {
    document.getElementById("emailError").textContent = "";
  }
});
Используйте событие `input` для текстового поля. Для проверки email можно использовать регулярное выражение: `/^[^\s@]+@[^\s@]+\.[^\s@]+$/`. Используйте метод `test()` регулярного выражения для проверки. Если email невалидный, выводите сообщение в абзац, используя `textContent`. Если валидный - очищайте `textContent`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Динамическое обновление суммы

Есть два числовых поля ввода и абзац, в котором отображается их сумма. При изменении значения любого из полей сумма должна пересчитываться и отображаться в абзаце.

HTML
Восстановить HTML
<input type="number" id="num1" value="0">
<input type="number" id="num2" value="0">
<p id="sumParagraph">Сумма: 0</p>
JavaScript
function updateSum() {
  const num1 = Number(document.getElementById("num1").value);
  const num2 = Number(document.getElementById(input__1).value);
  document.getElementById("sumParagraph").textContent = "Сумма: " + (num1 + num2);
}

document.getElementById("num1").addEventListener(input__2, updateSum);
document.getElementById("num2").addEventListener("input", updateSum);
Используйте событие `input` для обоих числовых полей. В обработчике получайте значения обоих полей (`.value`), преобразуйте их в числа (с помощью `Number()` или `parseFloat()`), складывайте и присваивайте результату свойство `textContent` абзаца.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Фильтрация списка

Есть текстовое поле и список элементов (`ul`). При вводе текста в поле, список должен фильтроваться: должны оставаться только те элементы списка, которые содержат введенный текст. Регистр символов не должен учитываться.

HTML
Восстановить HTML
<input type="text" id="filterInput">
<ul>
  <li>Яблоко</li>
  <li>Банан</li>
  <li>Апельсин</li>
  <li>Груша</li>
  <li>Виноград</li>
</ul>
JavaScript
document.getElementById("filterInput").addEventListener(input__1, function(event) {
 const filterText = event.target.value.toLowerCase();
 const listItems = document.querySelectorAll(input__2);

 listItems.forEach(item => {
 const itemText = item.textContent.toLowerCase();
 if (itemText.input__3(filterText)) {
 item.style.display = "";
 } else {
 item.style.display = input__4;
 }
 });
});
Используйте событие `input` для текстового поля. В обработчике получайте введенный текст (`event.target.value`), приводите его к нижнему регистру (`.toLowerCase()`). Затем проходите циклом по всем элементам списка (`document.querySelectorAll("li")`). Для каждого элемента списка получайте его текстовое содержимое (`.textContent`), приводите к нижнему регистру и проверяйте, содержит ли оно введенный текст (`.includes()`). Если содержит, показывайте элемент (`.style.display = ""`), если нет - скрывайте (`.style.display = "none"`).
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку
НайтиКурс.Ру
Добавить комментарий