Программы с графическим интерфейсом, как правило, определяют быстрые ком_ бинации клавиш для команд, доступных через раскрывающиеся меню, панели инструментов и тому подобное. Веб_броузеры (и HTML) в основном ориентирова_ ны на использование мыши, и по умолчанию веб_приложения быстрые комбина_ ции клавиш не поддерживают. Тем не менее такая поддержка возможна. Если веб_приложение моделирует раскрывающиеся меню средствами DHTML, необхо_ димо также предусмотреть поддержку комбинаций быстрых клавиш для доступа к пунктам этого меню. Пример 17.6 демонстрирует, как можно этого добиться. В нем определяется класс Keymap, который отображает идентификаторы комби_ наций клавиш, такие как «Escape», «Delete», «Alt_Z» и «alt_ctrl_shift_F5», на JavaScript_функции, вызываемые в ответ на нажатия этих комбинаций.
Привязки клавиш передаются конструктору Keymap() в виде JavaScript_объекта,
в котором именами свойств являются идентификаторы комбинаций клавиш, а значениями свойств – функции_обработчики. Добавление и удаление привязок выполняется с помощью методов bind() и unbind(). Установка объекта Keymap
в HTML_элемент (чаще всего в объект Document) выполняется методом install(). В процессе установки происходит регистрация обработчиков событий onkeydown и onkeypress в данном элементе с целью перехвата нажатий как функциональ_ ных, так и алфавитно_цифровых клавиш.
Начинается пример 17.6 с обширного комментария, где модуль описывается бо_ лее подробно. Особое внимание следует обратить на раздел комментария, оза_ главленный как «Ограничения».
Пример 17.6. Класс Keymap для реализации быстрых комбинаций клавиш
/*
* Keymap.js: привязка клавиатурных событий к функциям_обработчикам.
*
* Этот модуль определяет класс Keymap. Экземпляр этого класса представляет
* собой отображение идентификаторов комбинаций клавиш (определяемых далее)
* на функции_обработчики. Объект Keymap может устанавливаться в HTML_элемент
17.5. События клавиатуры
* для обработки событий keydown и keypress. Когда возникает такое событие,
* объект с помощью карты отображения комбинаций вызывает соответствующую
* функцию_обработчик.
*
* При создании объекта Keymap ему передается JavaScript_объект, который
* представляет первоначальный набор привязок. Имена свойств этого объекта
* должны совпадать с идентификаторами комбинаций клавиш, а значениями
* этих свойств являются функции_обработчики.
*
* После создания объекта Keymap добавлять новые привязки можно
* методом bind(), который принимает идентификатор комбинации
* и функцию_обработчик. Удалять существующие привязки можно методом
* unbind(), которому передается идентификатор комбинации клавиш.
*
* Чтобы использовать объект Keymap, следует вызвать его метод install(),
* передав ему HTML_элемент, такой как объект document. Метод install()
* добавляет к заданному объекту обработчики событий onkeypress и onkeydown,
* возможно, замещая установленные ранее обработчики.
* Когда вызываются эти обработчики, они определяют идентификатор
* комбинации клавиш из события и вызывают функцию_обработчик,
* привязанную к этой комбинации, если таковая существует.
* Если комбинация клавиш не связана с какой_либо функцией, вызывается
* функция_обработчик, предлагаемая по умолчанию (см. далее), если она определена.
* Один объект Keymap может быть установлен в несколько HTML_элементов.
*
* Идентификаторы комбинаций клавиш
*
* Идентификаторы комбинаций клавиш _ это строковое представление клавиши,
* нечувствительное к регистру символов, плюс возможная клавиша_модификатор,
* удерживаемая к моменту нажатия основной клавиши.
* Имя клавиши _ это обычно текст, написанный на самой клавише
* в английской раскладке. Допустимыми именами клавиш считаются: