Как уже говорилось, стандарт DOM Level 2 имеет модульную структуру, поэтому реализация может поддерживать одни его части и не поддерживать другие. Events – один из таких модулей. Проверить, поддерживает ли броузер этот мо_ дуль, можно следующим образом:
Однако модуль Events содержит только API для базовой инфраструктуры обра_ ботки событий. Поддержка определенных типов событий делегируется субмоду_ лям. Каждый субмодуль предоставляет поддержку определенной категории свя_ занных типов событий и определяет тип Event, передаваемый обработчикам со_ бытий для каждого из этих типов. Например, субмодуль с именем MouseEvents предоставляет поддержку событий mousedown, mouseup, click и событий родствен_ ных типов. Он также определяет интерфейс MouseEvent. Объект, реализующий этот интерфейс, передается функции_обработчику любого типа события, поддер_ живаемого данным модулем.
В табл. 17.2 перечислены все модули событий, определяемые ими интерфейсы и типы событий, которые они поддерживают. Обратите внимание: DOM Level 2 не стандартизует ни один из типов событий клавиатуры, поэтому в данном спи_ ске нет модуля событий клавиатуры. Тем не менее современные броузеры под_
420 Глава 17. События и обработка событий
держивают события клавиатуры, о чем подробнее рассказывается в этой главе далее. В табл. 17.2 и оставшейся части этой книги отсутствует описание модуля MutationEvents. Событие Mutation возбуждается при изменении структуры доку_ мента. Оно может использоваться приложениями, такими как HTML_редакто_ ры, но обычно не реализуется броузерами и практически игнорируется веб_про_ граммистами.
Как видно из таблицы, модули HTMLEvents и MouseEvents определяют типы собы_ тий, схожие с модулем событий уровня 0. Модуль UIEvents определяет типы со_ бытий, напоминающие события focus, blur и click, поддерживаемые элементами HTML_форм, но обобщенные таким образом, чтобы генерироваться любым эле_ ментом документа, который может получать фокус или активизироваться как_то иначе.
Как уже говорилось, когда происходит событие, его обработчику передается объект, реализующий интерфейс Event, связанный с данным типом события. Свойства этого объекта предоставляют информацию о событии, которая может быть полезна обработчику. В табл. 17.3 снова перечислены стандартные собы_ тия, но на этот раз организованные по типам, а не по модулям событий. Для ка_ ждого типа событий в этой таблице указан вид объекта события, передаваемого его обработчику, а также говорится, всплывает ли событие этого типа в иерар_ хии документа в процессе распространения события (столбец «B») и есть ли для данного события действие по умолчанию, которое может быть отменено методом preventDefault() (столбец «C»). Для событий модуля HTMLEvents в последнем, пя_ том, столбце таблицы указано, какие HTML_элементы могут генерировать дан_ ное событие. Для всех остальных типов событий в пятом столбце указано, какие свойства объекта события содержат существенные подробности о событии (эти свойства описаны в следующем разделе). Обратите внимание: свойства, перечис_ ленные в этом столбце, не включают свойств, определяемых базовым интерфей_ сом Event и содержащих осмысленные значения для всех типов событий.
Полезно сравнить табл. 17.3 с табл. 17.1, в которой перечислены обработчики со_ бытий Level 0, определяемые в HTML 4. Типы событий, поддерживаемые двумя этими моделями, в значительной степени совпадают (исключая модуль UIEvents). Стандарт DOM Level 2 добавляет поддержку типов событий abort, error, resize и scroll, которые не были стандартизованы в HTML 4, и исключает поддержку типа события dblclick, являющегося частью стандарта HTML 4. (Вместо этого,
17.2. Развитые средства обработки событий в модели DOM Level 2
как мы скоро увидим, свойство detail объекта, передаваемого обработчику собы_ тия click, определяет количество последовательных щелчков мыши.)