Последовательная обработка ключевых событий совсем не легка.
Во-первых, существует два разных типа кодов: коды клавиатуры (число, обозначающее клавишу на клавиатуре, которую нажал пользователь) и коды символов (число, представляющее символ Unicode). Вы можете надежно получить коды символов только в событии keypress
. Не пытайтесь получить коды символов для событий keyup
и keydown
.
Во-вторых, в событии keypress
вы получаете наборы значений, отличные от значений в keyup
или keydown
.
Я рекомендую эту страницу в качестве полезного ресурса. Как итог:
Если вы заинтересованы в обнаружении пользователя, печатающего символ, используйте событие keypress
. IE странно хранит код символа только в keyCode
, в то время как все другие браузеры сохраняют его в which
. Некоторые (но не все) браузеры также хранят его в charCode
и / или keyCode
. Пример обработчика нажатия клавиш:
function(evt) {
evt = evt || window.event;
var charCode = evt.which || evt.keyCode;
var charStr = String.fromCharCode(charCode);
alert(charStr);
}
Если вы заинтересованы в обнаружении непечатаемой клавиши (например, клавиши курсора), используйте событие keydown
. Здесь keyCode
это всегда свойство для использования. Обратите внимание, что keyup
события имеют одинаковые свойства.
function(evt) {
evt = evt || window.event;
var keyCode = evt.keyCode;
// Check for left arrow key
if (keyCode == 37) {
alert("Left arrow");
}
}