Javascript: разные ключевые коды в разных браузерах?

Итак, я видел сообщения некоторых форумов о разных браузерах, сообщающих о различиях keyCodes, но все, кажется, так избегают "почему?".

Я пытался захватить двоеточие (:) keyCode и понял, что Firefox сообщает e.keyCode 56. Хотя Chrome сообщает о 186 (я думаю, что это было).

Есть ли универсальный способ получить правильный ключевой код во всех браузерах?

И почему они разные, если они являются одними и теми же ключами?

Мне было бы более любопытно, есть ли международный способ получить одно нажатие клавиши.

Спасибо.

Ответы

Ответ 1

См. http://unixpapa.com/js/key.html для объяснения, почему у них разные ключи. Я не знаю международного способа сопоставления ключей.

Ответ 2

Это зависит от того, интересуетесь ли вы, какой физический ключ нажал пользователь или какой символ набрал пользователь. Если это ваш персонаж, вы можете получить это надежно во всех основных браузерах (используя свойство keypress event which в большинстве браузеров или keyCode в IE <= 8), но только в keypress событие. Если вы используете ключ, используйте событие keydown или keyup и изучите свойство keyCode, хотя точные сопоставления с ключевым кодом несколько отличаются друг от друга между браузерами.

Отличное объяснение и ссылки на все связанные с JavaScript события можно найти в http://unixpapa.com/js/key.html.

Чтобы пользователь надежно набрал символ двоеточия во всех основных браузерах, вы можете сделать следующее:

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    if (charCode && String.fromCharCode(charCode) == ":") {
        alert("Colon!");
    }
};

Ответ 3

Это старый вопрос. Современный способ сделать это - использовать event.key. См. MDN Key

Ответ 4

Я думаю, вы должны сделать JavaScript, чтобы получить ключевой код символа ':', поэтому script будет знать, что это такое в определенной среде. Аналогичный вопрос был задан fooobar.com/info/204425/....