JavaScript. Подробное руководство, 6-е издание, стр. 253
17.2. Регистрация обработчиков событий
Существует два основных способа регистрации обработчиков событий. Первый, появившийся на раннем этапе развития Всемирной паутины, заключается в установке свойства объекта или элемента документа, являющегося целью события. Второй способ, более новый и более универсальный, заключается в передаче обработчика методу объекта или элемента. Дело осложняется тем, что каждый прием имеет две версии. Свойство обработчика события можно установить в программном коде на языке JavaScript или в элементе документа, определив соответствующий атрибут непосредственно в разметке HTML. Регистрация обработчиков вызовом метода может быть выполнена стандартным методом с именем
<b>addEventListener(),</b><b>attachEvent(),</b>17.2.1. Установка свойств обработчиков событий
Самый простой способ зарегистрировать обработчик события заключается в том, чтобы присвоить свойству целевого объекта события желаемую функцию обработчика. По соглашению свойства обработчиков событий имеют имена, состоящие из слова «оп», за которым следует имя события:
<b>onclick, onchange, onload, onmouseover</b><b>// Присвоить функцию свойству onload объекта Window.</b><b>// Функция - обработчик события: она вызывается, когда документ будет загружен.</b><b>window.onload = function() {</b><b> // Отыскать элемент <form></b><b> var elt = document.getElementById("shipping_address");</b><b> // Зарегистрировать обработчик события, который будет вызываться</b><b> // непосредственно перед отправкой формы.</b><b> elt.onsubmit = function() { return validate(this); }</b><b>}</b>Такой способ регистрации обработчиков событий поддерживается во всех броузерах для всех часто используемых типов событий. Вообще говоря, все прикладные интерфейсы, получившие широкую поддержку, которые определяют свои события, позволяют регистрировать обработчики установкой свойств обработчиков событий.
Недостаток использования свойств обработчиков событий состоит в том, что они проектировались в предположении, что цели событий будут иметь не более одного обработчика для каждого типа событий. При создании библиотеки для использования в произвольных документах для регистрации обработчиков лучше использовать прием (такой как вызов метода
<b>addEventListener()</b>17.2.2. Установка атрибутов обработчиков событий
Свойства обработчиков событий в элементах документа можно также устанавливать, определяя значения атрибутов в соответствующих HTML-тегах. В этом случае значение атрибута должно быть строкой программного кода на языке JavaScript. Этот программный код должен быть не полным объявлением функции обработчика события, а только ее телом. То есть реализация обработчика события в разметке HTML не должна заключаться в фигурные скобки и предваряться ключевым словом function. Например:
<b><button onclick="alert( 'Спасибо'); "Щелкните здесь</button></b>Если значение HTML-атрибута обработчика события состоит из нескольких Java-Script-инструкций, они должны отделяться точками с запятой либо значение атрибута должно располагаться в нескольких строках.
Некоторые типы событий предназначены для броузера в целом, а не для какого-то конкретного элемента документа. Обработчики таких событий в языке JavaScript регистрируются в объекте
<b>Window</b><b><body>,</b><b>Window</b><b>onafterprint onfocus ononline onresize</b><b>onbeforeprint onhashchange onpagehide onstorage</b><b>onbeforeunload onload onpageshow onundo</b><b>onblur onmessage onpopstate onunload</b><b>onerror onoffline onredo</b>Когда в качестве значения атрибута обработчика события в разметке HTML указывается строка с программным кодом на языке JavaScript, броузер преобразует эту строку в функцию, которая будет выглядеть примерно так:
<b>function(event) {</b><b> with(document) {</b><b> with(this.form || {}) {</b><b> with(this) {</b><b> /* ваш программный код */</b><b> }</b><b> }</b><b> }</b><b>}</b>Если броузер поддерживает стандарт ES5, функция определяется в нестрогом режиме (раздел 5.7.3). Мы еще встретимся с аргументом
<b>event</b><b>with</b>При разработке клиентских сценариев обычно принято отделять разметку HTML от программного кода на языке JavaScript. Программисты, следующие этому правилу, избегают (или, по крайней мере, стараются избегать) использовать HTML-атрибуты обработчиков событий, чтобы не смешивать программный код на языке JavaScript и разметку HTML.
17.2.3. addEventListener()
В стандартной модели событий, поддерживаемой всеми броузерами, кроме IЕ версии 8 и ниже, целью события может быть любой объект - включая объекты
<b>Window</b><b>Document</b><b>Elements</b><b>addEventListener()</b><b>addEventListener()</b><b>addEventListener()</b><b>addEventListener()</b>