JavaRush/Курсы/Модуль 1: Web Core/Работа с событиями

Работа с событиями

Открыта

5.1 Основы работы с событиями

События в JavaScript позволяют взаимодействовать с пользователем и реагировать на его действия, такие как клики мышью, нажатия клавиш, изменения в формах и многое другое. Понимание того, как добавлять и удалять обработчики событий — важная часть разработки интерактивных веб-приложений.

Что такое события?

Событие — это сигнал от браузера, который сообщает, что что-то произошло. Например, пользователь кликнул по кнопке или загрузилась страница. События позволяют выполнять определенные действия в ответ на эти сигналы.

Типы событий

Существует множество типов событий. Некоторые из наиболее часто используемых включают:

  • Мышь: click, dblclick, mouseover, mouseout, mousedown, mouseup, mousemove
  • Клавиатура: keydown, keyup, keypress
  • Форма: submit, change, focus, blur
  • Документ/Окно: load, resize, scroll, unload

Обработчики событий

Обработчики событий (или слушатели событий) — это функции, которые выполняются в ответ на определенное событие. Они "слушают" определенные события и запускаются, когда эти события происходят.

5.2 Добавление обработчиков событий

Добавление обработчиков событий с addEventListener

Метод addEventListener позволяет добавлять обработчики событий к элементам. Он предоставляет большую гибкость и контроль по сравнению с традиционными методами добавления событий, такими как использование атрибутов HTML (onclick, onchange и т. д.).

Синтаксис:

element.addEventListener(event, handler, options);

Где:

  • element: элемент, к которому добавляется обработчик события
  • event: тип события, на которое нужно реагировать (например, click, input, keydown)
  • handler: функция, которая будет вызвана при возникновении события
  • options: дополнительные параметры (необязательный аргумент)

Пример: Добавление обработчика события click

В этом примере обработчик события добавляется к кнопке. Когда пользователь кликает по кнопке, появляется сообщение с уведомлением.

HTML
<!DOCTYPE html>
<html>
  <head>
    <title>Event Example</title>
  </head>
  <body>
  <button id="myButton">Click me</button>

  <script>
    const button = document.getElementById('myButton');

    button.addEventListener('click', function() {
      alert('Button clicked!');
    });
  </script>
  </body>
</html>

Пример: Добавление нескольких обработчиков событий

С помощью addEventListener можно добавлять несколько обработчиков для одного события.

В этом примере два обработчика события добавляются к кнопке. При клике оба обработчика выполняются последовательно, выводя соответствующие сообщения в консоль.

HTML
<!DOCTYPE html>
<html>
  <head>
    <title>Event Example</title>
  </head>
  <body>
    <button id="myButton">Click me</button>

    <script>
      const button = document.getElementById('myButton');

      button.addEventListener('click', function() {
        console.log('First handler');
      });

      button.addEventListener('click', function() {
        console.log('Second handler');
      });
    </script>
  </body>
</html>

5.3 Использование параметра options

Параметр options позволяет настроить поведение обработчика событий. Наиболее часто используемые опции:

  • once: если true, обработчик вызовется только один раз, после чего автоматически удалится
  • capture: если true, событие обрабатывается во время фазы захвата вместо фазы всплытия
  • passive: если true, указывает, что обработчик никогда не вызовет preventDefault()

Пример: Обработчик, который выполняется только один раз

В этом примере обработчик события сработает только один раз, после чего будет автоматически удален.

HTML
<!DOCTYPE html>
<html>
  <head>
    <title>Event Example</title>
  </head>
  <body>
    <button id="myButton">Click me</button>

    <script>
      const button = document.getElementById('myButton');

      button.addEventListener('click', function() {
        alert('This will be shown only once');
      }, { once: true });
    </script>
  </body>
</html>

5.4 Удаление обработчиков событий

Удаление обработчиков событий с removeEventListener

Метод removeEventListener позволяет удалять обработчики событий, которые были добавлены с помощью addEventListener. Для этого необходимо передать те же аргументы, которые использовались при добавлении обработчика.

Синтаксис:

element.removeEventListener(event, handler, options)

Где:

  • element: элемент, у которого удаляется обработчик события
  • event: тип события, обработчик которого нужно удалить
  • handler: функция, которая была назначена как обработчик события
  • options: дополнительные параметры (должны совпадать с параметрами, использованными при добавлении обработчика)

Пример: Удаление обработчика события click

В этом примере обработчик события click добавляется к кнопке. Нажатие на другую кнопку удаляет обработчик события click.

HTML
<!DOCTYPE html>
<html>
  <head>
    <title>Event Example</title>
  </head>
  <body>
    <button id="myButton">Click me</button>
    <button id="removeButton">Remove Click Handler</button>

    <script>
      const button = document.getElementById('myButton');
      const removeButton = document.getElementById('removeButton');

      function clickHandler() {
        alert('Button clicked!');
      }

      button.addEventListener('click', clickHandler);

      removeButton.addEventListener('click', function() {
        button.removeEventListener('click', clickHandler);
        alert('Click handler removed');
      });
    </script>
  </body>
</html>
1
Задача
Модуль 1: Web Core,  21 уровень,  4 лекция
Недоступна
Несколько обработчиков
Несколько обработчиков
1
Задача
Модуль 1: Web Core,  21 уровень,  4 лекция
Недоступна
Удаление обработчика
Удаление обработчика
Комментарии (3)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
No Name
Уровень 22
1 июня 2025, 17:37
+ лекция в копилке
Виктор РябовРаботает в ПОТОПАЛИ | походы
2 апреля 2025, 09:07
Важно отметить, что в удаляемом слушателе должны быть именно именованные функции. Если попробовать сделать удаление с анонимными функциями, то ничего не получится. Для меня было не очевидно.
wh1telisProduct Owner в X5
19 мая 2025, 12:39
да, такая же история, с анонимными работает, но не засчитывается. Пришлось переписать.