Книга: Выразительный JavaScript
События и узлы DOM
События и узлы DOM
Каждый обработчик событий браузера зарегистрирован в контексте. Когда вы вызываете addEventListener
, вы вызываете её как метод целого окна, потому что в браузере глобальная область видимости – это объект window
. У каждого элемента DOM есть свой метод addEventListener
, позволяющий слушать события от этого элемента.
<button>Нажми меня нежно.</button>
<p>А здесь нет обработчиков.</p>
<script>
var button = document.querySelector("button");
button.addEventListener("click", function() {
console.log("Кнопка нажата.");
});
</script>
Пример назначает обработчик на DOM-узел кнопки. Нажатия на кнопку запускают обработчик, а нажатия на другие части документа – не запускают.
Присвоение узлу атрибута onclick
работает похоже. Но у узла есть только один атрибут onclick
, значит таким способом вы можете зарегистрировать только один обработчик. Метод addEventListener
позволяет добавлять любое количество обработчиков, так что вы не замените случайно уже назначенный ранее обработчик.
Метод removeEventListener
, вызванный с такими же аргументами, как addEventListener
, удаляет обработчик.
<button>Act-once button</button>
<script>
var button = document.querySelector("button");
function once() {
console.log("Done.");
button.removeEventListener("click", once);
}
button.addEventListener("click", once);
</script>
Чтобы это провернуть, мы даём функции имя (в данном случае, once
), чтобы её можно было передать и в addEventListener
, и в removeEventListener
.
- Обработчики событий
- События и узлы DOM
- Объекты событий
- Распространение (propagation)
- Действия по умолчанию
- События от кнопок клавиатуры
- Кнопки мыши
- Движение мыши
- События прокрутки
- События, связанные с фокусом
- Событие загрузки
- График выполнения скрипта
- Установка таймеров
- Устранение помех (debouncing)
- Итог
- Упражнения
- Простейшие события
- Создание рабочей области для собраний на основе календарного события
- 14.7. Проникновение через доверительные узлы
- События
- Как работают сценарии. События
- Your Own Domain Name and Third-Party DNS
- Providing DNS for a Real Domain with BIND
- Providing DNS for a Real Domain
- Registering the Domain
- 12.6.2. Функции POSIX: random() и srandom()
- 1.3.1. Free Versus Freedom
- Using a Pseudorandom Number Generator