Список событий в JavaScript
Бывают различные виды событий. К примеру, события: форм, полей, мыши, клавиатуры, страницы. Далее в таблице собраны названия событий и их описание.
События мыши
Атрибут | Описание |
---|---|
click | Клик мыши на элементе (событие срабатывает после того, как кнопка мыши отпущена). |
dblclick | Сделан двойной щелчок. |
mousedown | Кнопка мыши нажата. |
mouseup | Кнопка мыши отжата. |
mouseover | Указатель мыши находится над элементом. |
mousemove | Указатель мыши движется над элементом. |
mouseout | Указатель мыши двигался над элементом, но ушёл с него. |
События клавиатуры
Атрибут | Описание |
---|---|
keydown | Зажата кнопка на клавиатуре. |
keypress | Тоже что и «keydown», но и кнопка зажимается настолько долго, что происходит повторный набор символа. |
keyup | Была отпущена нажатая кнопка. |
События полей, форм и страницы
Атрибут | Описание |
---|---|
submit | Форма начала отправляться (нажата кнопка «submit»), но переадресация на страницу в атрибуте «action» ещё не началась. |
change | Содержимое элемента изменилось (срабатывает в том числе, если изменились значение атрибутов). |
select | Текст или дочерние элементы выделены. |
focus | Элемент получил фокус. К примеру, клик по текстовому полю даёт на него фокус и можно набирать текст |
blur | Элемент потерял фокус. |
load | Завершена загрузка страницы в браузере. |
unload | Страница в браузере закрывается или происходит переход на другую страницу по ссылке. |
scroll | Происходит прокрутка страницы или элемента. |
Cмотрите другие статьи:
Работа с атрибутами элементов в JavaScript
Список атрибутов для событий в JavaScript
Была ли эта статья полезна? Есть вопрос?
Закажите недорогой хостинг Заказать
всего от 290 руб
События в Javascript
В этом видео мы с вами рассмотрим события (по английски евенты) в javascript. И мы с вами на самом деле их уже использовали, когда писали onсlick на DOM елементе. То есть мы с вами добавляли евент клик на DOM елемент.
Зачем нам нужны евенты вообще? Когда мы хотим выполнить какой-то код при клике на елемент, либо при наведении мыши, либо при фокусе, то нам нужны евенты. То есть мы вешаем евент на DOM елемент и он там висит. И ждет, когда же мы сделаем такой евент. Например когда мы кликнем по елементу. И тогда он выполняет эту функцию.
Вешать евенты с помощью html, это неправильно и не гибко. Намного лучше для этого использовать специальный метод. Это метод addEventListener.
Давайте уберем атрибут onclick с нашей кнопки, и добавим ей класс change
<button>Change</button>
Теперь в начале выполнения нашего javascript файла мы хотим повесить слушателя (по английски listener) этого евента на нашу кнопку.
Но сейчас мы столкнемся с одним нюансом. Давайте попробуем в нашем файле найти кнопку и законсолить ее
console.log(document.querySelector('.change'))
Если мы посмотрим в браузер, то нам вывелось null. И вполне справедливо, так как браузер исполняет код сверху вниз, и на момент, когда у нас отрабатывает javascript, DOM у нас еще не загружен. Пофиксить это очень просто. Давайте переставим script javascript в конец body. Это абсолютно нормальная практика.
<body> <button>Change</button> <script src='code.js'></script> </body>
Теперь если мы посмотрим в браузер, то наш елемент вывелся и мы можем с ним работать. Давайте повесим listener клика на нашу кнопку.
Давайте запишем наш DOM елемент в переменную и добавим addEventListener. Это функция, которая первым параметром принимает название евента, в нашем случае клик, а вторым параметром функцию, которая выполнится, когда мы кликнем.
var changeButton = document.querySelector('.change') changeButton.addEventListener('click', function () { console.log('we clicked!') })
Если мы посмотрим в браузер, то при клике у нас вывелся наш console.log.
И таким образом можно навешивать сколько угодно обработчиков. Наприме давайте добавим еще один listener.
var changeButton = document.querySelector('.change') changeButton.addEventListener('click', function () { console.log('we clicked!') }) changeButton.addEventListener('click', function () { console.log('we clicked2!') })
Давайте теперь напишем небольшой пример. Мы хотим создать 2 елемента и при наведении на первый, мы хотим показывать второй елемент.
Давайте добавим 2 елемента на страницу и добавим им классы. Второй елемент скроем написав inline display: none. Конечно, лучше было бы написал стили в отдельном css файле, но для маленького примера можно и так.
<div> First element </div> <div> Second element </div>
Теперь давайте найдем эти два елемента в нашем javascript
var firstElement = document.querySelector('.firstElement') var secondElement = document.querySelector('.secondElement')
И навесим на первый елемент 2 события: mouseover и mouseout. То есть первое будет происходить при наведении на елемент, а второе когда курсор уходит с елемента.
var firstElement = document.querySelector('.firstElement') var secondElement = document.querySelector('.secondElement') firstElement.addEventListener('mouseover', function () { console.log('mouse in') }) firstElement.addEventListener('mouseout', function () { console.log('mouse out') })
Если мы посмотрим в браузер, то при наведении и выведении курсора выводится console. log.
Давайте теперь при наведении добавим второму елементу display: block, а при уведении курсора display: none
var firstElement = document.querySelector('.firstElement') var secondElement = document.querySelector('.secondElement') firstElement.addEventListener('mouseover', function () { secondElement.style.display = 'block' }) firstElement.addEventListener('mouseout', function () { secondElement.style.display = 'none' })
Если мы посмотрим в браузер, то при наведении на первый елемент у нас показывается второй елемент, а при уведении курсора скрывается.
Если у вас что-то не получается, либо возникли вопросы и комментарии, пишите их прямо под этим видео и я обязательно на них отвечу.
Событие— веб-API | MDN
Интерфейс Event
представляет событие, происходящее в DOM.
Событие может быть вызвано действием пользователя, например. щелчок по кнопке мыши или нажатие на клавиатуру или сгенерированный API для представления хода выполнения асинхронной задачи.
HTMLElement.click()
элемента или определив событие, а затем отправив его в указанную цель, используя EventTarget.dispatchEvent()
. Существует множество типов событий, некоторые из которых используют другие интерфейсы, основанные на основном интерфейсе Event
. Само событие
содержит свойства и методы, общие для всех событий.
Многие элементы DOM можно настроить так, чтобы они принимали (или «прослушивали») эти события и выполняли код в ответ на их обработку (или «обработку»). Обработчики событий обычно подключаются (или «прикрепляются») к различным элементам HTML (таким как Примечание: Один элемент может иметь несколько таких обработчиков даже для одного и того же события, особенно если их присоединяют отдельные независимые модули кода, каждый для своих независимых целей. (Например, веб-страница с рекламным модулем и модулем статистики, которые отслеживают просмотр видео.) При наличии множества вложенных элементов, каждый со своим обработчиком (обработчиками), обработка событий может стать очень сложной, особенно если родительский элемент получает то же самое событие, что и его дочерние элементы, потому что они «пространственно» перекрываются, поэтому событие технически происходит в обоих случаях, а порядок обработки таких событий зависит от параметров всплывающей подсказки и захвата событий для каждого запущенного обработчика. Ниже приведен список интерфейсов, основанных на основном интерфейсе Обратите внимание, что все интерфейсы событий имеют имена, оканчивающиеся на «Event». Создает объект Логическое значение, указывающее, всплывает ли событие через DOM. Логическое значение, указывающее, можно ли отменить событие. Логическое значение, указывающее, может ли событие всплывать через границу между теневым DOM и обычным DOM. Ссылка на текущую зарегистрированную цель для события. Это объект, которому в настоящее время планируется отправить событие. Возможно, это было изменено во время перенацеливания на . Указывает, отменил ли вызов Указывает, какая фаза потока событий обрабатывается. Это одно из следующих чисел: Указывает, было ли событие инициировано браузером (например, после щелчка пользователя) или сценарием (например, с использованием метода создания события). Ссылка на объект, которому изначально было отправлено событие. Время создания события (в миллисекундах). По спецификации это значение представляет собой время, прошедшее с начала эпохи, но на самом деле определения браузеров различаются. Кроме того, ведутся работы по изменению этого параметра на Имя без учета регистра, определяющее тип события. Исторический псевдоним Явная исходная цель события. Первоначальная цель события до любых ретаргетингов. Историческое свойство по-прежнему поддерживается, чтобы существующие сайты продолжали работать. Используйте Логическое значение, указывающее, будет ли данное событие всплывать через теневой корень в стандартный DOM. Вместо этого используйте Псевдоним (из старых версий Microsoft Internet Explorer) для Возвращает путь к событию (массив объектов, для которых будут вызываться слушатели). Это не включает узлы в теневых деревьях, если теневой корень был создан с закрытым Отменяет событие (если оно отменяемое). Для этого конкретного события запретить вызов всех других слушателей. Сюда входят слушатели, прикрепленные к одному и тому же элементу, а также те, которые прикреплены к элементам, которые будут пройдены позже (например, на этапе захвата). Останавливает дальнейшее распространение событий в DOM. Инициализирует значение созданного события. Если событие уже отправлено, этот метод ничего не делает. Используйте конструктор (вместо этого загрузка только в браузере таблицы BCD Последнее изменение: 000Z»> 10 октября 2022 г. , участниками MDN Если вы предпочитаете учиться визуально, посмотрите видеоверсию этой статьи. Теперь, если вы уже понимаете, как создать прослушиватель событий, вы можете пропустить этот раздел, так как он охватывает только самые основные функции определения прослушивателей событий. Прослушиватель событий в JavaScript — это способ ожидания взаимодействия с пользователем, такого как щелчок или нажатие клавиши, а затем запускать некоторый код всякий раз, когда это действие происходит. Одним из распространенных вариантов использования прослушивателей событий является прослушивание событий нажатия на кнопку. Чтобы настроить прослушиватель событий, вам просто нужно иметь переменную, которая ссылается на элемент, а затем вызвать функцию Первый параметр — это просто строка, представляющая собой имя события для прослушивания. Вы можете прослушивать сотни событий, таких как Второй параметр — это функция, которая имеет единственный аргумент — аргумент события, обычно называемый Также важно отметить, что если у вас есть несколько обработчиков событий в элементе для одного и того же события, все они будут срабатывать в том порядке, в котором они были добавлены к элементу. Теперь вы можете продвинуться довольно далеко, используя только простые прослушиватели событий, но когда вы начнете создавать более сложные проекты, вам нужно будет понять, как эти события запускаются и как они распространяются через DOM. Здесь вступают в действие этапы всплывающего окна и захвата. Представьте, что у нас есть следующие HTML и JavaScript. Если мы щелкнем внутри дочернего элемента, вы, вероятно, подумаете, что он зарегистрирует Когда событие инициируется для элемента, это событие всплывает вверх по дереву документа ко всем элементам, внутри которых находится этот элемент. В нашем примере, когда щелкают дочерний элемент, он также запускает прослушиватель события щелчка на родительском элементе, поскольку дочерний элемент находится внутри родительского элемента. Это даже делает еще один шаг вперед и запускает прослушиватель событий щелчка в самом документе. Мы воспользуемся этим фактом, когда будем иметь дело с делегированием событий. Теперь все, что я объяснил выше, имеет отношение к фазе пузырька, которая является фазой по умолчанию, когда срабатывают прослушиватели событий, но у событий также есть еще одна фаза, называемая фазой захвата, которая происходит первой. Фаза захвата аналогична фазе пузырька, но событие начинается с элемента верхнего уровня, в нашем случае с документа, и продвигается внутрь. Это означает, что в нашем примере, если мы нажмем на дочерний элемент, мы вызовем прослушиватель событий захвата для документа, затем для родителя, а затем для дочернего элемента. Затем мы войдем в фазу пузырьков и запустим прослушиватели событий пузырьков для дочернего элемента, затем для родителя, а затем для документа. До сих пор мы рассмотрели только то, как настроить прослушиватели событий для фазы всплывающих окон, но если вы хотите иметь прослушиватель событий захвата, вам нужно использовать третий параметр функции С приведенным выше кодом, если мы нажмем на ребенка, он выйдет из системы следующим образом. Как вы можете видеть, все прослушиватели событий захвата, которые мы создали, срабатывают первыми, а затем срабатывают прослушиватели событий пузырьков. Наличие этих двух фаз событий может показаться странным, но причина этого в том, что вы можете реагировать на события в нужном вам порядке. Одним из распространенных вариантов использования события захвата является перехват события до того, как оно попадет к дочерним элементам, и фактическая его остановка. Используя метод Другой метод, В приведенном выше примере мы остановили распространение в первом родительском прослушивателе событий захвата, что предотвращает распространение события на другие элементы через фазы захвата/пузырька. Кроме того, поскольку мы использовали Одна важная вещь, которую следует знать о всплывающих окнах событий, заключается в том, что всплывают не все события. Такие события, как событие Хорошо знать, как добавить прослушиватель событий, но в конечном итоге вам потребуется удалить добавленные вами прослушиватели. Проще всего это сделать с помощью Функция Приведенный выше код добавляет прослушиватель по щелчку, который вызывает функцию Если вы не знаете, почему это так, вам следует ознакомиться с моим полным справочником по сравнению со значением, в котором объясняется именно эта концепция. Общепринятой практикой является запуск события только один раз, и делать это с помощью Независимо от того, сколько раз я нажимаю кнопку выше, она будет регистрировать только Последний способ удаления прослушивателя событий является наименее распространенным, но может быть невероятно полезным. Этот метод включает использование Приведенный выше код выглядит немного запутанным, но я попытаюсь объяснить, что происходит. Сначала мы создаем новый По сути, Все концепции, которые мы рассмотрели до сих пор, привели к последней теме этой статьи — делегированию событий. На мой взгляд, понимание того, как это работает, является наиболее важной концепцией в этой статье. В приведенном выше коде мы выбираем все кнопки на нашей странице и добавляем прослушиватель событий для прослушивания нажатия на эти кнопки. Затем после всего этого мы добавляем новую кнопку на страницу. К этой новой кнопке НЕ подключен какой-либо прослушиватель событий щелчка, поскольку он был добавлен на страницу после добавления наших прослушивателей событий. Это распространенная ошибка, которую совершают новые разработчики, так как они думают, что эта новая кнопка будет иметь прослушиватель событий, но поскольку она была добавлена после добавления прослушивателя событий, это не так. Чтобы обойти эту проблему, вам нужно либо вручную добавлять прослушиватель событий к вашим новым элементам каждый раз, когда они создаются, либо вам нужно использовать делегирование событий. С делегированием события вы настраиваете прослушиватель событий на родительском элементе, таком как документ, а затем внутри этого родительского элемента вы проверяете, было ли событие запущено элементами, которые вам нужны, прежде чем запускать код события. Поскольку событие щелчка поднимается к родительским элементам, мы знаем, что в конечном итоге любое событие щелчка на нашей странице попадет в документ. Затем мы проверяем документ, чтобы увидеть, соответствует ли цель события кнопке селектора Написав наш код таким образом, мы гарантируем, что любая кнопка на нашей странице, даже недавно добавленная кнопка, будет работать правильно при нажатии. Однако, если мы нажмем на что-то, что не является кнопкой, код
,
и т. д.) с использованием EventTarget.addEventListener()
, и это обычно заменяет использование старых атрибутов обработчика событий HTML. Кроме того, при правильном добавлении такие обработчики также могут быть отключены при необходимости с помощью removeEventListener()
. Event
, со ссылками на соответствующую документацию в справочнике MDN API. AnimationEvent
Событие АудиоОбработки
Устаревший Перед разгрузкой события
БлобСобытие
Событие буфера обмена
CloseEvent
Событие композиции
Пользовательское событие
Девицемотионевент
Девицеориентатионевент
Девицепроксимитиевент
Устаревший Событие перетаскивания
ErrorEvent
ФетчЕвент
Фокусное событие
Фонтфацесетлоадевент
ФормДатаЭвент
GamepadEvent
HashChangeEvent
HIDInputReportEvent
Идбверсиончанжеевент
Событие ввода
Событие Клавиатуры
MediaStreamEvent
Not for use in new websites.»>
Устаревший Событие сообщения
MouseEvent
Событие мутации
Устаревший OfflineAudioCompletionEvent
PageTransitionEvent
PaymentRequestUpdateEvent
PointerEvent
Попсстатеевент
Прогрессивент
RTCDataChannelEvent
RTCPeerConnectionIceEvent
StorageEvent
Отправить Событие
SVGEvent
Устаревший Событие времени
TouchEvent
TrackEvent
Событие перехода
UIEvent
UserProximityEvent
Not for use in new websites.»>
Устаревший Вебглконтекстевент
Событие колеса
Событие()
Event
, возвращая его вызывающей стороне. Event.bubbles
Только чтение Event.cancelable
Только чтение Event.composed
Только чтение Event.currentTarget
Только чтение Event.defaultPrevented
Только чтение event.preventDefault()
событие. Event.eventPhase
Только чтение NONE
, CAPTURING_PHASE
, AT_TARGET
, BUBBLING_PHASE
. Event.isTrusted
Только чтение Event.target
Только чтение Event.timeStamp
Только чтение DOMHighResTimeStamp вместо
. Event.type
Только чтение Устаревшие и нестандартные свойства
Event.cancelBubble
Устаревший Event.stopPropagation()
, который следует использовать вместо него. Установка его значения в true
перед возвратом из обработчика событий предотвращает распространение события. Event.explicitOriginalTarget
Нестандартный Только чтение Event.originalTarget
Нестандартный Только чтение Событие.returnValue
Устаревший Event.preventDefault()
и Event.defaultPrevented вместо
. Event.scoped
Только чтение Устаревший , составленный из
. Event.srcElement
Только чтение Not for use in new websites.»>
Устаревший Событие.цель
. Вместо этого используйте Event.target
. Event.composedPath()
ShadowRoot.mode
. Событие.preventDefault()
Event.stopImmediatePropagation()
Event. stopPropagation()
Устаревшие методы
Event.initEvent()
Устаревший Event()
). Спецификация DOM Standard
# interface-event цель
против currentTarget
против relatedTarget
против originalTarget
) Полное руководство по прослушивателям событий JavaScript проект, который вы создаете. Эти обработчики событий на первый взгляд кажутся простыми, но есть множество менее известных функций обработчиков событий, таких как всплытие, захват, делегирование и многое другое. Понимание этих функций имеет решающее значение для того, чтобы стать опытным разработчиком JavaScript, поэтому независимо от того, где вы находитесь в своем путешествии по программированию, в этой статье будет что-то для вас.
Основы прослушивателя событий
addEventListener
для этого элемента. Эта функция принимает как минимум два параметра. click
, input
и mousemove
. Это полный список событий, но на самом деле вы будете использовать только некоторые из этих событий, так что не утруждайте себя запоминанием их всех. e
. Эта функция вызывается каждый раз, когда происходит событие, и объект события содержит информацию о событии. В зависимости от того, какое событие вы слушаете, объект события будет иметь разные важные свойства, но почти каждое событие будет иметь свойство target
. Это свойство представляет элемент, в котором происходит событие, что важно для более продвинутого использования прослушивателей событий, которые мы рассмотрим позже в этой статье. Распространение событий
Дочерний элемент
, но на самом деле он зарегистрирует как Дочерний элемент
, так и Родительский элемент
в указанном порядке. Причиной этого является пузырение. Этап всплывающей подсказки
Фаза захвата
addEventListener
. Этот третий параметр представляет собой объект параметров, который имеет свойство захвата
, которое, если установлено значение true, будет помечать это событие как событие захвата. Остановка распространения событий
stopPropagation
для объекта события, мы можем остановить продолжение захвата и всплытия события, что означает, что если в цепочке есть какие-либо другие прослушиватели событий, которые будут срабатывать, они этого не сделают. В приведенном выше примере только Родительский захват
будет зарегистрирован, так как мы остановим распространение события после прослушивателя родительского события захвата. stopImmediatePropagation
, доступен для объекта события, и он работает немного по-другому. Если вы используете stopImmediatePropagation
, то событие не только остановит распространение к дочерним/родительским элементам через фазы пузырька и захвата, но также остановит запуск других событий в элементе. stopImmediatePropagation
, все остальные прослушиватели событий щелчка на родительском элементе также не будут срабатывать. Важно отметить, что прослушиватели событий для одного и того же элемента будут запускаться в том порядке, в котором они определены, поэтому, если вы хотите, чтобы другие прослушиватели событий не срабатывали с помощью этого метода, они должны быть определены после прослушивателя, который останавливает распространение. Важные примечания о всплывающих окнах
focus
, которое срабатывает, когда элемент получает фокус, не всплывают. Как правило, события, которые не всплывают, имеют смысл не всплывать, поскольку они относятся только к отдельному элементу, для которого срабатывает событие, например, к событию focus
. Удаление прослушивателей событий
removeEventListener
, но есть и два более продвинутых способа сделать это, о которых мы также поговорим. removeEventListener
removeEventListener
— это простая функция, которую вы можете вызвать для элемента, чтобы удалить прослушиватель событий, ранее добавленный с помощью addEventListener
. sayHi
, а затем немедленно удаляет ее. Важно отметить, что при добавлении/удалении прослушивателей событий вам необходимо убедиться, что функция точно такая же. Если бы вместо этого я написал свой код следующим образом, он фактически не удалил бы прослушиватель событий, поскольку это две разные функции, даже если они содержат один и тот же код. Запуск событий один раз
removeEventListener
немного сложно и не всегда точно. Вот почему третий параметр options для addEventListener
имеет свойство с именем Once
, которое, если установлено значение true, гарантирует, что ваш прослушиватель событий запускается только один раз. Нажатие
один раз, так как прослушиватель событий автоматически удаляет себя после запуска один раз. Прерываемые прослушиватели событий
AbortController
. Если вы хотите создать прослушиватель событий, который работает до тех пор, пока не будет выполнено определенное условие, это может быть идеальным вариантом для вас. AbortController
. Затем мы берем этот AbortController
и передаем его свойство signal
в свойство signal
объекта options для нашей функции addEventListener
. Это соединяет наш прослушиватель событий с этим AbortController
, поэтому, если мы прервем его, он удалит прослушиватель событий. Затем, наконец, в нашем коде мы вызываем метод прерывания
на нашем AbortController
, когда счетчик больше или равен 3, который удалит прослушиватель событий. AbortController
работает следующим образом: вы передаете часть сигнала функции addEventListener
, а затем в любое время в будущем вы можете вызвать abort
на AbortController
, и он удалит прослушиватель событий для вас. . Делегирование событий
9.0005 . Этот селектор, который мы передаем в
соответствует
, является просто селектором CSS, подобным тому, который вы передаете в querySelector
. e.target.matches
вернет false, что означает, что ничего не будет зарегистрировано.