Объекты событий, которые передаются обработчикам keydown, keypress и keyup, относятся к одному и тому же типу, однако интерпретация свойств этих объек_ тов должна производиться в зависимости от типа события. Реализация объектов событий зависит от типа броузера и потому имеет разные свойства в Firefox и IE.
Если в момент нажатия клавиши была нажата и удерживалась клавиша Alt, Ctrl или Shift, этот факт отмечается в свойствах altKey, ctrlKey и shiftKey объекта со_ бытия. Фактически эти свойства являются переносимыми: они доступны как в Firefox, так и в IE и для всех типов событий клавиатуры. (Единственное ис_ ключение – комбинации с клавишей Alt в IE рассматриваются как непечатае_ мые, поэтому они не генерируют событие keypress.)
Однако операция получения кода клавиши или символа из события клавиатуры менее переносима. В Firefox для этих целей определены два свойства. Свойство keyCode содержит низкоуровневый виртуальный код клавиши и передается с со_ бытием keydown. Свойство charCode содержит печатный символ, сгенерированный в результате нажатия клавиши, и передается с событием keypress. В Firefox функциональные клавиши генерируют событие keypress – в этом случае свойство charCode содержит ноль, а свойство keyCode содержит виртуальный код клавиши.
В IE существует единственное свойство keyCode, содержимое которого зависит от типа события. Для событий keydown свойство keyCode содержит виртуальный код клавиши, для события keypress – код символа.
Коды символов могут быть преобразованы в соответствующие им символы с по_ мощью статической функции String.fromCharCode(). Для корректной обработки кодов клавиш достаточно просто знать, какие клавиши какие коды генерируют. В пример 17.6, который приводится в конце раздела, включена карта кодов функциональных клавиш (по крайней мере, в стандартной североамериканской раскладке клавиатуры).
442 Глава 17. События и обработка событий
