Блоки прослушивания событий определены в спецификации DOM2 Events, реализованной в Firefox, Opera и Safari, и поэтому работают только в этих Web-браузерах.
Методы установки и отмены блока прослушивания определены в интерфейсе EventTarget спецификации DOM2 Events. Этот интерфейс устанавливается для элемента, в котором обрабатывается событие.
Установить блок прослушивания события можно с помощью метода:
addEventListener(имя-события, имя-функции-обработчика,
перехват-события)
где имя-события задает строковое имя события, имя-функции-обработчика задает имя функции, которая будет обрабатывать событие для элемента. Параметр перехват-события задает булевское значение возможности (true) или отмены (false) перехвата события элементом-предком. В случае перехвата события обработка события выполняется сначала в обработчике для элемента-предка, а затем в обработчике событий данного элемента (если такой обработчик есть).
Задание метода
removeEventListener(имя-события, имя-функции-обработчика,
перехват-события)
удаляет блок прослушивания событий с заданными параметрами.
|
|
В Internet Explorer функции, аналогичные методам интерфейса EventTarget, выполняют методы attachEvent() и detachEvent(), также устанавливаемые для элемента документа, в котором обрабатывается событие.
Метод
attachEvent(имя-события, имя-функции-обработчика)
прикрепляет к событию с заданным именем заданную функцию – обработчик события (параметра перехват-события нет, поскольку в Internet Explorer перехват событий не определен).
Метод
detachEvent(имя-события, имя-функции-обработчика)
открепляет от события с заданным именем заданную функцию – обработчик события.
В отличие от имени-события в методах интерфейса EventTarget, имя-события в функциях attachEvent() и detachEvent() задается с префиксом "on".
Задание блока прослушивания, так же, как и определение функции-обработчика в предыдущем способе, должно быть выполнено до обработки Web-браузером элемента, для которого задана обработка события.
Пример 4.5.45. Использование блока прослушивания события:
1. При использовании блока прослушивания события щелчка мыши в Firefox, Opera и Safari функция b1Handle()в примере 4.5.44(1) примет следующий вид:
function b1Handle()
{
// Если Web-браузер - Internet Explorer
if(navigator.userAgent.indexOf("MSIE")!= -1)
// Прикрепление функции-обработчика
// для элемента b1
document.getElementById(
"b1").attachEvent("onclick", b1Event);
else
// Добавление блока прослушивания
// для элемента b1
document.getElementById("b1").addEventListener(
"click", b1Event, false);
}
2. Добавим в примере 4.5.44(2) блок прослушивания события щелчка мыши для всех элементов в теле документа:
// Если Web-браузер - Internet Explorer
if(navigator.userAgent.indexOf("MSIE")!= -1)
// Прикрепление функции-обработчика
// для события щелчка мышью в документе
document.attachEvent("onclick", clickEvent);
else
// Добавление блока прослушивания
// для события щелчка мышью в документе
document.addEventListener("click", clickEvent, false);
Функция clickEvent() является как функцией-обработчиком (в Internet Explorer), так и функцией, вызываемой блоком прослушивания события в Firefox, Opera и Safari.