- •4.2.1. Повторные и опущенные объявления
- •Типы данных
- •3.1.3. Литералы вещественных чисел
- •3.1.6. Специальные числовые значения
- •3.2.2. Управляющие последовательности в строковых литералах
- •3.3. Логические значения
- •3.4.1. Функциональные литералы
- •3.6. Массивы
- •7.6.1. Добавление новых элементов в массив
- •7.7.9. Методы toString() и toLocaleString()
- •7.7.10. Дополнительные методы массивов
- •11.1.2. Классы символов
- •11.1.3. Повторение
- •11.1.4. Альтернативы, группировка и ссылки
- •11.1.6. Флаги
- •1 Здесь функция alert() используется просто для отображения информации: она
- •13.2.2. Сценарии во внешних файлах
- •13.3. Обработчики событий в html
- •13.5.5. Объект Window как контекст исполнения
- •15.2. Свойства объекта Document
- •1 Модель dom может также использоваться для представления xmLдокументов,
- •15.4.2. Узлы
- •15.4.2.1. Типы узлов
- •1 Стандарт dom определяет интерфейсы, а не классы. Те, кто не знаком с термином
- •15.4.2.2. Атрибуты
- •15.5. Обход документа
- •1 Во многих сложных dhtmLэффектах используются также приемы обработки
- •16.1. Обзор css
- •1 Эрик Мейер «css – каскадные таблицы стилей. Подробное руководство», 3е из
- •16.1.1. Применение правил стиля к элементам документа
- •16.2.1. Ключ к dhtml: абсолютное позиционирование
- •16.2.3. Определение положения и размеров элемента
- •16.3.2. Работа со свойствами стилей
- •300 Пикселов:
- •17.1.1.1. Аппаратнозависимые и аппаратнонезависимые события
- •17.1.2. Обработчики событий как атрибуты
- •1 Подробное описание htmLформ, включая пример проверки правильности за
- •17.2.6.3. Интерфейс MouseEvent
- •17.5. События клавиатуры
- •17.5.1. Типы событий клавиатуры
- •17.5. События клавиатуры 441
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 – для обработ
ки нажатий клавиш с печатными символами