Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASCII и latin.docx
Скачиваний:
3
Добавлен:
08.08.2019
Размер:
190.09 Кб
Скачать

17.5. События клавиатуры

Как вы уже знаете, события и обработка событий – это те области, которые явля

ются источником множества несовместимостей между броузерами. Так вот, наи

большее число несовместимостей дают события клавиатуры: они не стандартизо

ваны в модуле Events модели DOM Level 2, поэтому броузеры линеек IE и Mozilla

трактуют их поразному. К сожалению, этот факт лишь отражает состояние дел

в сфере обработки ввода с клавиатуры. Прикладные программные интерфейсы

операционных и оконных систем, на основе которых построены броузеры, обыч

но отличаются сложностью. Обработка ввода текстовой информации является

непростой задачей, которая осложняется наличием различных раскладок кла

виатуры, вплоть до необходимости обработки ввода на идеографических языках.

Несмотря на существующие сложности, по меньшей мере для Firefox и IE мож

но создавать сценарии, выполняющие обработку событий клавиатуры. В этом

разделе демонстрируется несколько простых сценариев, затем вашему внима

нию будет представлен универсальный класс Keymap, который отображает собы

тия клавиатуры на JavaScriptфункции, предназначенные для их обработки.

17.5.1. Типы событий клавиатуры

Существует три типа событий клавиатуры: keydown, keypress и keyup, которые соот

ветствуют обработчикам событий onkeydown, onkeypress и onkeyup. Как правило, од

но нажатие клавиши генерирует три события, когда клавиша отпускается: key

down, keypress и keyup. Если клавиша удерживается в нажатом состоянии и при

этом включен режим автоповтора, между событиями keydown и keyup может про

изойти несколько событий keypress, но такое поведение зависит от настройки сис

темных параметров и параметров броузера, поэтому полагаться на него нельзя.

Из трех клавиатурных событий событие keypress наиболее дружественное по от

ношению к пользователю: объект события, ассоциированный с ним, содержит

код фактического символа нажатой клавиши. События keydown и keyup являются

низкоуровневыми, объекты этих событий содержат так называемый «виртуаль

ный код клавиши», который соответствует аппаратному коду, генерируемому

клавиатурой. Для алфавитноцифровых символов из набора ASCII эти виртуаль

17.5. События клавиатуры 441

ные коды совпадают с ASCIIкодами, но они обработаны лишь частично. Если

нажать и удерживать клавишу Shift и при этом нажать клавишу 2, событие key

down сообщит, что была нажата комбинация клавиш Shift2. Событие keypress вы

полнит полную интерпретацию и сообщит, что нажатая комбинация клавиш со

ответствует печатному символу @. (В разных раскладках клавиатуры могут

быть получены разные результаты.)

Функциональные клавиши, которые не соответствуют печатным символам, та

кие как Backspace, Enter, Escape, клавиши со стрелками, Page Up, Page Down и клави

ши от F1 до F12, генерируют события keydown и keyup. В некоторых броузерах они

также генерируют событие keypress. Однако в IE событие keypress генерируется

только тогда, когда результатом нажатия является ASCIIкод, т. е. печатный или

управляющий символ. Функциональные клавиши, не соответствующие ни одно

му из печатных символов, имеют виртуальные коды, которые доступны через

объект события keydown. Например, клавиша «стрелка влево» генерирует код 37

(по крайней мере, в стандартной североамериканской раскладке клавиатуры).

Таким образом, как правило, событие keydown наилучшим образом подходит для

обработки нажатий функциональных клавиш, а событие keypress – для обработ

ки нажатий клавиш с печатными символами

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]