2011-12-15 3 views
0

Это действительно странно.Как получить символ, нажатый в текстовом поле

У меня есть текстовое поле. Я слушаю нажатия клавиш и нажатия клавиш.

Когда я нажимаю "(", нажатие отапливают e.keyCode == e.which == 40

При нажатии клавиши со стрелкой вниз, KeyUp отапливают e.keyCode == e.which == 40

Почему это так странно?

+1

By '(' вы имеете в виду удерживание shift и нажатие 9, правильно? –

+0

Какой браузер вы используете? С нажатием клавиши chrome с jquery я не могу захватить клавиши со стрелками. '(' Does give me 40, ascii для этого символа. –

ответ

1

keydown и keyup события дают код, указывающий, какой ключ нажата, в то время как keypress указывает, какой характер был введен.

Char code for "(" is is 40 (keypress event) и код клавиши для стрелки вниз также 40 (keyup).

Try:

String.fromCharCode(40); // "(" 
3

Традиционно клавиши со стрелками перекрывается ASCII коды, но были представлены программисту в виде последовательности двух байтов, так что вы были в курсе, что специальная клавиша была нажата. С появлением Unicode это уже не чистое решение.

Браузеры реализовали различные способы представления специального ввода ключа в среду выполнения Javascript. Подробности: explained here.

Обычно я использую событие «keydown» при обнаружении клавиш со стрелками, так как это событие имеет правильный код клавиатуры и будет срабатывать с другим кодом ключа (один для 9), когда пользователь вводит левую скобку. Это может не работать в случаях, когда вы хотите разрешить пользователю повторять ключевое событие, удерживая клавишу со стрелкой.

Смежные вопросы