Как мы видели в главе 13, интерактивные JavaScript_программы основаны на модели программирования, управляемого событиями. При таком стиле програм_ мирования веб_броузер генерирует событие, когда с документом или некоторым его элементом что_то происходит. Например, веб_броузер генерирует событие, когда завершает загрузку документа, когда пользователь наводит указатель мы_ ши на гиперссылку или щелкает на кнопке в форме. Если JavaScript_приложе_ ние интересует определенный тип события для определенного элемента доку_ мента, оно может зарегистрировать обработчик события (event handler) – Java_ Script_функцию или фрагмент JavaScript_кода для этого типа события в интере_ сующем вас элементе. Потом, когда возникает это событие, броузер вызовет код обработчика. Все приложения с графическим интерфейсом пользователя разра_ ботаны подобным образом: они ждут, пока пользователь что_нибудь сделает (т. е. ждут, когда произойдут события), и затем реагируют на его действия.
В качестве отступления следует отметить, что таймеры и обработчики ошибок (описание тех и других вы найдете в главе 14) связаны с программированием, управляемым событиями. Работа таймеров и обработчиков ошибок, как и обра_ ботчиков событий, описанных в этой главе, основана на регистрации функции в броузере и последующем вызове броузером этой функции, когда происходит соответствующее событие. Однако в этом случае событием является истечение указанного промежутка времени или возникновение ошибки при выполнении JavaScript_кода. Хотя таймеры и обработчики ошибок в данной главе не обсуж_ даются, их можно рассматривать как средства, относящиеся к обработке собы_ тий, и я рекомендую вам заново прочитать разделы 14.1 и 14.7, переосмыслив их в контексте данной главы.
Обработчики событий активно применяются в нетривиальных JavaScript_про_ граммах. Некоторые примеры JavaScript_кода с простыми обработчиками собы_ тий мы уже видели. Данная глава заполняет подробностями все пробелы в теме событий и их обработки. К сожалению, эти подробности сложнее, чем должны
404 Глава 17. События и обработка событий
были быть, поскольку дальнейшее обсуждение основано на четырех различных и несовместимых моделях обработки событий.1 Вот эти модели.
Исходная модель обработки событий
Эта простая модель используется (хотя и без подробного документирования) в данной книге. В ограниченном объеме она была кодифицирована стандар_ том HTML 4 и неформально рассматривается как часть прикладного интер_ фейса (API) DOM Level 0. Несмотря на ограниченность ее возможностей, она реализована всеми веб_броузерами, поддерживающими JavaScript, и потому переносима.
Стандартная модель обработки событий
Это мощная и богатая возможностями модель была стандартизована в DOM уровня 2. Поддерживается всеми современными броузерами, исключая Inter_ net Explorer.
Модель обработки событий Internet Explorer
Эта модель реализована в IE 4 и расширена в IE 5. Она обладает некоторыми, но не всеми возможностями стандартной модели обработки событий. Хотя корпорация Microsoft участвовала в создании модели обработки событий DOM Level 2 и располагала достаточным временем для реализации стандарт_ ной модели обработки событий в IE 5.5 и IE 6, разработчики этих броузеров продолжают придерживаться своей фирменной модели обработки событий.2 Это значит, что JavaScript_программисты должны писать для броузеров IE специальный программный код, если хотят получить доступ к развитым ме_ ханизмам обработки событий.
В этой главе описываются все модели обработки событий. Описание трех моде_ лей сопровождается тремя разделами, включающими расширенные примеры обработки событий мыши, клавиатуры и события onload. Заканчивается глава кратким обсуждением темы генерации и отправки искусственных событий.