Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

По своему действию методы

attachEvent
и
detachEvent
похожи на методы
addEventListener
и
removeEventListener
со следующими исключениями:

• Поскольку модель событий в IE не поддерживает фазу перехвата, методы

attachEvent
и
detachEvent
принимают только два аргумента: тип события и функцию обработчика.

• В первом аргументе методам в IE передается имя свойства обработчика с префиксом «on», а не тип события без этого префикса. Например, методу

attachEvent
должно передаваться имя «опсііск», тогда как методу
addEventListener
должно передаваться имя «click».

• Метод

attachEvent
позволяет зарегистрировать одну и ту же функцию обработчика несколько раз. При возникновении события указанного типа зарегистрированная функция будет вызвана столько раз, сколько раз она была зарегистрирована.

Ниже показано, как обычно выполняется регистрация обработчика с помощью метода

addEventListener
в броузерах, поддерживающих его, и с помощью метода
attachEvent
в других броузерах:

var b = document.getElementByldC'mybutton");

var handler = function { alert("Спасибо!"); };

if (b.addEventListener)

b.addEventListener("click", handler, false);

else if (b.attachEvent)

b.attachEvent("onclick", handler);

17.3. Вызов обработчиков событий

После регистрации обработчика событий веб-броузер будет вызывать его автоматически, когда в указанном объекте будет возникать событие указанного типа. В этом разделе подробно описывается порядок вызова обработчиков событий, аргументы обработчиков, контекст вызова (значение

this
), область видимости и назначение возвращаемого значения обработчика. К сожалению, некоторые из этих подробностей отличаются между IE версии 8 и ниже и другими броузерами.

Кроме того, с целью описать, как вызываются отдельные обработчики событий, в этом разделе также разъясняется, как происходит распространение событий: как единственное событие может привести к вызову нескольких обработчиков в оригинальном целевом объекте и в содержащих его элементах документа.

17.3.1. Аргумент обработчика событий

При вызове обработчика событий ему обычно (за одним исключением, о котором рассказывается ниже) передается объект события в виде единственного аргумента. Свойства объекта события содержат дополнительную информацию о событии. Свойство

type
, например, определяет тип возникшего события. В разделе 17.1 упоминалось множество других свойств объекта события для различных типов событий.

В IE версии 8 и ниже обработчикам событий, зарегистрированным установкой свойства, объект события при вызове не передается. Вместо этого объект события сохраняется в глобальной переменной

window.event
. Для переносимости обработчики событий можно оформлять, как показано ниже, чтобы они использовали переменную
window.event
при вызове без аргумента:

function handler(event) {

event = event || window.event;

// Здесь находится реализация обработчика

}

Объект события передается обработчикам событий, зарегистрированным с помощью метода

attachEvent,
но они также могут использовать переменную
window.event
.

В разделе 17.2.2 говорилось, что при регистрации обработчика события посредством HTML-атрибута броузер преобразует строку с программным кодом на языке JavaScript в функцию. Броузеры, отличные от IE, создают функцию с единственным аргументом

event
. В IE создается функция, не принимающая аргументов. Если в таких функциях использовать идентификатор
event
, он будет ссылаться на
window.event
. В любом случае обработчики событий, определяемые в разметке HTML, могут ссылаться на объект события, используя идентификатор
event
.

17.3.2. Контекст обработчиков событий

Когда обработчик событий регистрируется установкой свойства, это выглядит как определение нового метода элемента документа:

e.onclick = function { /* реализация обработчика */ };

Поэтому нет ничего удивительного, что обработчики событий вызываются (с одним исключением, касающимся IE, которое описывается ниже) как методы объектов, в которых они определены. То есть в теле обработчика событий ключевое слово

this
ссылается на цель события.

  • Читать дальше
  • 1
  • ...
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: