Уроки JavaScript – Краткий обзор событий в браузере
Прежде, чем мы перейдем к рассмотрению данной темы, важно сделать акцент на одной вещи: дерево DOM и язык JavaScript – это две разные сущности. События браузера являются частью API DOM, но они не являются частью JavaScript.
События браузера являются основой любого веб-приложения и они очень часто используются в JavaScript. Именно через эти события мы определяем то, что должно произойти. Если в вашем документе есть кнопка, и вам требуется проверка формы при ее нажатии, вы должны использовать событие «click».
Стандартные события браузера
Для начала рассмотрим основные стандартные события браузера:
События мыши
- ‘
mousedown‘ – событие mousedown вызывается, когда указывающее устройство (обычно мышь) нажимается вниз над элементом. - ‘
mouseup‘ – событие mouseup вызывается, когда указывающее устройство (обычно мышь) отпускается вверх над элементом. - ‘
click‘ – событие click определяется как mousedown, за которым следует mouseup в том же положении. - ‘
dblclick‘ – это событие вызывается, когда на элементе кликают дважды в быстрой последовательности в одной и той же позиции (двойной клик). - ‘
mouseover‘ – событие mouseover вызывается, когда устройство перемещается над элементом. - ‘
mouseout‘ – событие mouseout вызывается, когда указывающее устройство перемещается в сторону от элемента. - ‘
mousemove‘ – событие mousemove вызывается, когда указывающее устройство перемещается при наведении на элемент.
События клавиатуры
- ‘
keypress‘ – это событие вызывается при каждом нажатии клавиши на клавиатуре. - ‘
keydown‘ – это событие также срабатывает при каждом нажатии клавиши, оно запускается до событияkeypress. - ‘
keyup‘ – это событие вызывается при отпускании клавиши после событийkeydownиkeypress.
События формы
- ‘
select‘ – это событие вызывается, когда выбран текст внутри текстового поля (input,textareaи т. д.). - ‘
change‘ – это событие вызывается, когда элемент управления теряет фокус ввода и/или значение было изменено с момента получения фокуса. - ‘
submit‘ – это событие вызывается при отправке формы. - ‘
reset‘ – это событие вызывается при сбросе формы. - ‘
focus‘ – это событие вызывается, когда элемент получает фокус (обычно от курсора мыши). - ‘
blur‘ – это событие вызывается, когда элемент теряет фокус.
Другие события
- ‘
load‘ – это событие вызывается, когда браузер завершил загрузку всего содержимого в документе, включая контент, картинки, фреймы и объекты. - ‘
resize‘ – это событие вызывается при изменении размера документа (т.е. когда изменяется размер браузера) - ‘
scroll‘ – это событие вызывается при прокрутке документа. - ‘
unload‘ – это событие вызывается, когда браузер удаляет весь контент из окна или фрейма, т.е. когда вы покидаете страницу.
Есть еще много и других событий. Те, что показаны выше, являются основными, и с ними вы будете часто сталкиваться в JavaScript коде. Имейте в виду, что некоторые из них имеют различия в разных браузерах. Кроме того, имейте в виду, что многие браузеры реализуют собственные специфичные события.
Обработка событий
Мы вкратце рассмотрели события, но нам еще предстоит обсудить процесс связывания определенных функций с событием. Вот где происходит волшебство. Все перечисленные выше события будут происходить независимо от того, написали ли вы какой-либо код JavaScript, поэтому, чтобы использовать их возможности, вы должны зарегистрировать «обработчики событий», — это функции, которые используются для обработки события. Ниже представлен простой пример использования базовой модели регистрации событий (также известной как «традиционная регистрация событий»):
<button id="some-button">Нажми меня!</button>
// JavaScript:
var someElement = document.getElementById('some-button');
// Эта функция будет нашим обработчиком событий:
function clickButton() {
alert('Вы только что нажали кнопку!');
}
// Здесь регистрация события:
someElement.onclick = clickButton;
У нас есть кнопка с идентификатором «some-button», и мы получили к ней доступ с помощью document.getElementById. Затем мы создаем новую функцию, которая позже назначается свойству DOM «onclick» кнопки. Вот и все, что нужно сделать!
Модель «регистрации базового события» настолько проста, насколько это возможно. Вы добавляете префикс к событию после «on» и получаете к нему доступ как к свойству любого элемента. По сути, это иная версия выполнения чего-то подобного (что не есть рекомендуемым):
<button onclick="return clickButton()">Нажми меня!</button>
Встроенная обработка событий (с использованием атрибутов HTML) делает поддержку вашего сайта намного сложной. Лучше использовать ненавязчивый JavaScript и хранить все это в соответствующих файлах .js, которые могут подключаться в документ по мере необходимости. Причину, по которой вы не должны использовать встроенную обработку событий, можно сравнить с причиной, по которой не желательно использовать встроенные CSS стили (используя style="…").
Расширенная регистрация события
Название «расширенная» не должна вводить вас в заблуждение, — это не означает, что ее лучше использовать. Рассмотренная выше методика (базовая модель регистрации) идеально подходит в большинстве случаев. Использование базовой техники имеет одно ключевое ограничение – вы не можете привязать более одной функции к событию. Это не так уж и плохо, поскольку вы можете вызывать любое количество других функций из этой единственной функции, но если вам нужно больше контроля, тогда используйте расширенную модель регистрации событий.
Эта модель позволяет привязывать несколько обработчиков к одному событию, что означает, что при возникновении события будут работать несколько функций. Кроме того, эта модель позволяет легко удалить любой из связанных обработчиков событий.
Ниже пример данной модели:
var myParagraph = document.getElementById('paragraph');
myParagraph.addEventListener('click', paragraphClick, false);
// функция paragraphClick:
function paragraphClick() {
alert('Вы нажали на параграф!');
}
Методы addEventListener и removeEventListener
Методы addEventListener и removeEventListener являются одними из популярных способов присвоить или удалить обработчик. Они также позволяют использовать большое количество любых других обработчиков.
Присвоение обработчика осуществляется вызовом метода addEventListener с указанием 3-х аргументов:
element.addEventListener(event, handler, phase);
event: тип события, напримерclickhandler: ссылка на функцию, которая будет выступать обработчикомphase: булево значение, которое определяет, на какой фазе должен сработать обработчик. Необязательный аргумент.true– фаза перехвата,false– фаза всплытия
Удаление обработчика осуществляется вызовом метода removeEventListener, с передачей тех же аргументов, что были у addEventListener:
element.removeEventListener(event, handler, phase);