События DOM

Событие DOM - это программный интерфейс, предназначенный для уведомления кода о каких-либо изменениях в окне браузера; это сигнал от браузера о том, что что-то произошло с каким-либо DOM-узлом.

События (в общем случае) могут возникать в результате действий пользователя (например, использование мыши или изменение размера окна), изменения состояния базовой среды (например, низкий заряд батареи или мультимедийные события из операционной системы) и других причин.

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

Список различных типов событий на MDN https://developer.mozilla.org/ru/docs/Web/Events.

Виды событий DOM (чему можно назначить событие)

Виды событий DOM:

  1. События ресурса (запускаются для ресурса (или объекта Element), когда ресурс не может быть загружен или не может быть использован).
  2. Сетевые события (браузер получил или потерял доступ к сети).
  3. События фокуса (Element получил или потерял фокус).
  4. События соединения с WebSocket.
  5. События журнала сессии.
  6. События CSS-анимации (CSS-анимация началась, прервалась, завершена, повторяется; подробнее о transitions https://developer.mozilla.org/ru/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions).
  7. События формы (кнопка "Сброс" нажата, кнопка "Отправить" нажата).
  8. События печати (диалоговое окно печати открыто или закрыто).
  9. События Text Composition (происходит, когда подготавливается композиция отрывка текста: аналогично нажатию клавиш для ввода с клавиатуры, но работает с другими входами, такими как распознавание речи).
  10. События представления элемента (Element был переведён в полноэкранный режим или обратно, изменён размер просмотра документа, документ или элемент были прокручены).
  11. События буфера обмена (выделенное было вырезано и (или) скопировано в буфер обмена, содержимое буфера обмена было вставлено).
  12. События клавиатуры (нажатие или отпускание клавиш).
  13. События "мыши".
  14. События перетаскивания (Drag & Drop).
  15. События медиа-содержимого.
  16. События выполнения (Progress-события).
  17. События хранилища
  18. События обновления
  19. События изменения значений
  20. Другие (в т.ч. нестандартные) события.

[свернуть]

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

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

Способы назначения обработчика события:

  1. используя атрибут элемента HTML:
    • указывая код обработчика внутри HTML-кода элемента (например, <input type="button" value="Нажми меня" onclick="alert('Нажатие!')">);
    • с выносом кода обработчика в отдельную JavaScript-функцию и её вызовом внутри HTML-кода элемента (например, <input type="button" value="Нажми меня" onclick="clckButton()">, где clckButton() - функция-обработчик);
  2. используя свойства DOM-объекта (например, element.onclick = fn(){} или element.onclick = fn);
  3. используя специальные методы addEventListener() и removeEventListener().

Особенности назначения обработчиков событий:

  1. Обработчики всегда хранятся в свойствах DOM-объекта, а атрибуты HTML – лишь один из способов их инициализации. Так как имена свойств элемента DOM должны быть уникальными, то назначить несколько обработчиков с одинаковыми именами нельзя (повторная инициализация перезапишет код обработчика).
  2. Не используйте setAttribute() для обработчиков (setAttribute('onclick', function() { }) работать не будет).
  3. Регистр DOM-свойства имеет значение (используйте elem.onclick, а не elem.ONCLICK).
Пример перезаписи обработчика при повторном назначении

Невозможность повесить несколько обработчиков на одно событие - недостаток первых двух способов (addEventListener() этого недостатка лишен).

[свернуть]

Убрать обработчик можно передачей в его значение null (например, elem.onclick = null).

Примеры

С выносом кода обработчика в отдельную JavaScript-функцию и её вызовом внутри HTML-кода элемента:

С использованием свойств DOM-объекта:

Или так:

[свернуть]

This внутри обработчика события

Внутри обработчика события this ссылается на тот элемент (event.currentTarget), которому назначен обработчик, например:

Еще примеры

[свернуть]

Метод addEventListener()

Метод EventTarget.addEventListener() регистрирует определённый обработчик события, вызванного на EventTarget.

EventTarget может быть Element, Document, Window, или любым другим объектом, поддерживающим события (таким как XMLHttpRequest).

Синтаксис:

где

  • type - чувствительная к регистру строка, представляющая тип обрабатываемого события;
  • listener - объект, принимающий уведомление, когда событие указанного типа произошло (это может быть объект, реализующий интерфейс EventListener или просто функция JavaScript);
  • options (необязательный) - объект, который определяет характеристики объекта, прослушивающего событие:
    1. capture: Boolean - указывает, что события этого типа будут отправлены зарегистрированному обработчику listener перед отправкой на EventTarget, расположенный ниже в дереве DOM (фаза, на которой должен сработать обработчик, подробнее Всплытие и погружение (перехват) событий DOM);
    2. once: Boolean - указывает, что обработчик должен быть вызван не более одного раза после добавления (если true, то обработчик автоматически удаляется при вызове);
    3. passive: Boolean - указывает, что обработчик никогда не вызовет preventDefault(). Если всё же вызов будет произведён, браузер должен игнорировать его и генерировать консольное предупреждение;
    4. mozSystemGroup: Boolean - указывает, что обработчик должен быть добавлен в системную группу (доступно только в коде, запущенном в XBL или в расширении Chrome);
  • wantsUntrusted - если true, то обработчик будет получать сгенерированные события, посланные со страницы (по умолчанию равно false для Сhrome и true для обычных веб-страниц). Этот параметр доступен только в Gecko и в основном полезен для использования в дополнениях и самом браузере. Смотрите Взаимодействие между привилегированными и непривилегированными страницами для примеров использования.

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

Пример

[свернуть]

Достоинства метода addEventListener():

  1. позволяет добавлять множество обработчиков для одного события;
  2. предоставляет точный контроль фазы срабатывания (вызова) обработчика (погружение или всплытие);
  3. срабатывает на любом DOM-элементе, а не только на HTML-элементах.

Метода, который позволяет получить из элемента обработчики событий, назначенные через addEventListener(), не существует.

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

Т.о.,  если функцию-обработчик не сохранить, то удалить её не получится.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.