В JavaScript события - это действия, которые происходят в приложении. Они запускаются различными вещами, такими как ввод данных, отправка форм и изменения в элементе, например изменение размера, или ошибки, возникающие при запуске приложения и т. Д. Мы можем назначить обработчик событий для ответа на эти события.
События, происходящие с элементами DOM, можно обрабатывать, назначая обработчик свойствам объекта DOM для соответствующих событий. В этой статье мы рассмотрим, как использовать свойства onkeydown
и onkeypress
редактируемого элемента ввода, а также свойство onload
для любого элемента DOM. Мы также рассмотрим свойство onloadeddata
для таких мультимедийных элементов, как audio
и video
.
onkeydown
Мы можем установить функцию обработчика событий для свойства onkeydown
входного элемента DOM для обработки события keydown
. Событие keydown
запускается при нажатии любой клавиши независимо от того, создают ли они символьное значение. Событие keydown
предоставляет код, указывающий, какая клавиша нажата, а событие keypress
предоставляет вводимый символ. Например, буква «a» в нижнем регистре будет сообщаться как код клавиши 65 с keydown
, а код символа 97 будет сообщаться с помощью keypress
. keypress
устарел, поэтому его нельзя использовать в производственном коде.
В Firefox, начиная с версии 65, событие keydown
также запускается во время композиции IME, чтобы улучшить кроссбраузерность для китайских, японских и корейских пользователей. Мы можем игнорировать событие keydown
во время композиции IME, мы можем проверить свойство isComposing
объекта event
, предоставленного обработчиком события keydown
. Например, мы можем написать:
const input = document.querySelector('input'); input.onkeydown = event => { if (event.isComposing || event.keyCode === 229) { return; } };
Каждый раз, когда мы вводим китайский, японский или корейский язык, свойство isComposing
будет иметь значение true
, а свойство keyCode
будет иметь значение 229.
Мы также можем использовать его для регистрации значения кода клавиши, который пользователь нажимает на клавиатуре. Сначала мы можем поместить следующий HTML-код:
<input type="text" id="input" required> <p id="log"></p>
Затем в соответствующем коде JavaScript мы можем написать следующий код для присоединения функции обработчика событий для события keydown
, установив свойство onkeydown
нашего элемента input
. Функция обработчика событий регистрирует код клавиши, которая была нажата.
const input = document.querySelector('input'); const log = document.getElementById('log'); input.onkeydown = e => { log.textContent += ` ${e.code}`; };
У нас должно получиться что-то вроде:
KeyE KeyR KeyF KeyG KeyT KeyG KeyT KeyG KeyH KeyH KeyF KeyV KeyG KeyB KeyG KeyB
в элементе с ID log
.
onkeyup
Свойство onkeyup
элемента ввода позволяет нам присоединить функцию обработчика событий для обработки события keyup
. Событие keyup
запускается, когда пользователь отпускает ранее нажатую клавишу.
Событие keyup
предоставляет код, указывающий, какая клавиша нажата, в то время как событие keypress
предоставляет вводимый символ. Например, буква «a» в нижнем регистре будет отображаться как код клавиши 65 с keyup
, а код символа 97 будет сообщаться с помощью keypress
.
В Firefox, начиная с версии 65, событие keyup
также запускается во время композиции IME, чтобы улучшить кроссбраузерность для пользователей из Китая, Японии и Кореи. Мы можем игнорировать событие keyup
во время создания IME, мы можем проверить свойство isComposing
объекта event
, предоставленного обработчиком событий keyup
. Например, мы можем написать:
const input = document.querySelector('input'); input.onkeyup = event => { if (event.isComposing || event.keyCode === 229) { return; } };
Мы также можем использовать его для регистрации значения кода клавиши, который пользователь нажимает на клавиатуре. Сначала мы можем поместить следующий HTML-код:
<input type="text" id="input" required> <p id="log"></p>
Затем в соответствующем коде JavaScript мы можем написать следующий код для присоединения функции обработчика событий для события keydown
, установив свойство onkeydown
нашего элемента input
. Функция обработчика событий регистрирует код клавиши, которая была нажата.
const input = document.querySelector('input'); const log = document.getElementById('log'); input.onkeyup = e => { log.textContent += ` ${e.code}`; };
У нас должно получиться что-то вроде:
KeyD KeyF KeyG KeyT KeyH KeyG KeyT
в процессе
Свойство onload
элемента DOM позволяет нам установить для него функцию обработчика событий для обработки события load
, которое запускается при загрузке любого элемента. Он запускается в конце процесса загрузки документа. Все объекты в документах должны находиться в DOM при запуске события load
, включая все изображения, сценарии, ссылки и подкадры.
Также есть DOMContentLoaded
и DOMFrameContentLoaded
, которые запускаются после загрузки DOM страницы, но не дожидаются завершения загрузки других ресурсов.
Например, мы можем использовать его для запуска некоторого кода после загрузки элемента window
или img
, сначала написав HTML-код:
<!DOCTYPE html> <html> <head> <title>Onload</title> </head> <body> <div>Text</div> <img src="https://images.unsplash.com/photo-1503066211613-c17ebc9daef0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80" /> <script src="main.js"></script> </body> </html>
Затем мы можем написать соответствующий код JavaScript:
const img = document.querySelector("img"); img.onload = () => { console.log("img loaded"); }; window.onload = () => { console.log("window loaded"); };
Тогда мы должны увидеть:
img loaded window loaded
Когда мы загружаем страницу.
onloadeddata
Событие loadeddata
запускается, когда завершается загрузка первого кадра мультимедиа. Это применимо к мультимедийным элементам, таким как audio
и video
. Чтобы обработать это событие, мы можем установить свойство onloadeddata
медиа-элемента для запуска функции обработчика событий, когда это событие запускается.
Например, мы также можем установить свойство onloadeddata
в следующем коде. Сначала мы добавляем HTML-код для элемента video
:
<video src='https://sample-videos.com/video123/mp4/240/big_buck_bunny_240p_30mb.mp4'></video>
Затем в соответствующем коде JavaScript мы можем установить функцию обработчика событий с помощью следующего кода:
const video = document.querySelector('video'); video.onloadeddata = () => { console.log('video loaded'); }
Функция обработчика событий также имеет объект event
в качестве первого параметра. Мы можем добавить параметр event
, как в следующем коде:
const video = document.querySelector('video'); video.onloadeddata = (event) => { console.log(event); }
Это дает нам что-то вроде:
bubbles: false cancelBubble: false cancelable: false composed: true currentTarget: null defaultPrevented: false detail: 0 eventPhase: 0 explicitOriginalTarget: <html> isTrusted: true layerX: 0 layerY: 0 originalTarget: HTMLDocument https://fiddle.jshell.net/_display/ rangeOffset: 0 rangeParent: null relatedTarget: null returnValue: true srcElement: HTMLDocument https://fiddle.jshell.net/_display/ target: HTMLDocument https://fiddle.jshell.net/_display/ timeStamp: 1463 type: "focus" view: Window https://fiddle.jshell.net/_display/ which: 0
Результатом выше являются свойства и соответствующие значения объекта Event
. Чтобы узнать больше об объекте Event
, мы можем посмотреть предыдущие статьи.
Мы можем установить функцию обработчика событий для свойства onkeydown
входного элемента DOM для обработки события keydown
. Событие keydown
запускается при нажатии любой клавиши, независимо от того, создают ли они символьное значение. Событие keydown
предоставляет код, указывающий, какая клавиша нажата. Свойство onkeyup
элемента ввода позволяет нам присоединить функцию обработчика событий для обработки события keyup
. Событие keyup
запускается, когда пользователь отпускает ранее нажатую клавишу. Объект event
предоставляет ту же информацию, что и обработчик событий keydown
.
Свойство onload
элемента DOM позволяет нам установить для него функцию обработчика событий для обработки события load
, которое запускается при загрузке любого элемента. Он запускается в конце процесса загрузки документа. Все объекты в документах должны находиться в DOM при запуске события load
, включая все изображения, сценарии, ссылки и подкадры.
Событие loadeddata
запускается, когда завершается загрузка первого кадра мультимедиа, такого как audio
и video
. Чтобы обработать это событие, мы можем установить свойство onloadeddata
медиа-элемента для запуска функции обработчика событий, когда это событие запускается.