Почему клавиши со стрелками, вкладки и т. Д. Не принимаются обработчиком onkeypress поля ввода в некоторых браузерах? - PullRequest
2 голосов
/ 25 июня 2009

Я строю поле ввода текста, предназначенное для ввода и редактирования времени. Одна из частей функциональности требует различных способов сосредоточиться на различных компонентах времени (часы, минуты, секунды), которые я указываю при выделении текста. Прямой выбор возможен с помощью мыши, и это прекрасно работает. Другая функция - клавиатурная навигация.

Большая часть этой функциональности основана на том факте, что я могу обрабатывать события keyPress, подавлять поведение по умолчанию и заменять специальное действие.

В Firefox у меня это работает хорошо. Пользователь может использовать клавиши со стрелками влево / вправо или tab / shift-tab для перемещения между частями времени (и когда они добираются до конца, клавиша следующей вкладки покидает поле и обычно фокусирует следующий элемент).

В Internet Explorer 7 (возможно, другие?) Клавиши со стрелками и вкладка даже не принимаются обработчиком нажатия клавиш. При нажатии клавиш со стрелками выделение текста теряется и курсор перемещается на единицу. Эффект предоставления нескольких полей исчезает, и это приводит к нарушению чувства контроля. Tab также пропускает обработчик и сразу же переключается на следующий фокусируемый элемент.

Есть ли уловки, чтобы перехватить эти ключи?

1 Ответ

7 голосов
/ 25 июня 2009

Вам нужно использовать onkeydown для не символьных ключей. onkeypress в IE обрабатывает только ключи, которые возвращают строку.

Чтобы конкретно указать документацию MSDN:

Начиная с Microsoft Internet Explorer 4.0, событие onkeypress срабатывает и может быть отменен для следующих ключей:

  • Буквы: A - Z (прописные и строчные)
  • Цифры: 0 - 9
  • Символы:! @ # $% ^ & * () _ - + = <[] {},. /? \ | '`" ~ </li>
  • Система: ESC, ПРОБЕЛ, ВВОД
...