Разбор кода Javascript для цифровой клавиатуры - PullRequest
11 голосов
/ 19 февраля 2012

Я пытаюсь проанализировать события нажатия клавиш на цифровой клавиатуре со следующим:

$('#myDiv').keydown(function(e) {
  val = String.fromCharCode(e.which)
});

Проблема в том, что клавиатура 0-9 возвращает коды клавиш 96-105, которые согласно fromCharCode() являются строчными буквами a-i. Как получить события нажатия клавиш на цифровой клавиатуре для разрешения на соответствующий номер?

Ответы [ 5 ]

21 голосов
/ 19 февраля 2012

Вы не делаете: вы используете событие keypress. Событие keypress - единственное событие, которое даст вам достоверную информацию о набранных символах. Ваш существующий код будет работать, если вы просто измените keydown на keypress.

9 голосов
/ 19 февраля 2012

Значение which, переданное keydown, не является символьным кодом;это код ключа (и коды варьируются от браузера / ОС к браузеру / ОС).Вы можете сопоставить его с персонажем, используя таблицы на этой странице , но сказать, что этот материал немного ... неудобен ... было бы преуменьшением значения.: -)

В противном случае лучше всего подождать события keypress, в котором будет указан код символа (если он уместен), а не код ключа.

Пример: Живая копия | Живой источник

jQuery(function($) {

  $("#theField")
    .keydown(function(event) {
      showKey("keydown", event.which);
    })
    .keypress(function(event) {
      showKey("keypress", event.which);
    })
    .focus();

  function showKey(eventName, which) {
    display(eventName +
            ": " + which + " (" +
            String.fromCharCode(which) + ")");
  }

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});

Использование этого HTML:

<input type="text" id="theField">
1 голос
/ 29 ноября 2016

Ответы здесь устарели, потому что KeyboardEvent.which , KeyboardEvent.keyCode и KeyboardEvent.charCode устарели.

Правильный способ получения символьной клавиши в последних версиях Firefox, Chrome, IE / Edge и Safari - использовать KeyboardEvent.key , и он должен работать с любым событием клавиши, а не только с * 1011. *.

KeyboardEvent.key Совместимость браузера

document.
  querySelector('input').
  addEventListener('keydown', event => console.log(event.key));
<input placeholder="Start typing...">
<ч />

Если вам все еще нужно получить код символа, вам следует использовать свойство KeyboardEvent.code .

KeyboardEvent.code Совместимость браузера

document.
  querySelector('input').
  addEventListener('keydown', event => console.log(event.code));
<input placeholder="Start typing...">
1 голос
/ 07 февраля 2014

Существует способ сделать это с помощью нажатия клавиши, если нажатие клавиши не работает из-за необходимости отмены события и т. Д. Используйте оператор if () с этим тестом:

parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58

ИЛИ с событиями jQuery:

parseInt(event.originalEvent.keyIdentifier.substring(2),16) > 47 && parseInt(event.originalEvent.keyIdentifier.substring(2),16) < 58

В этих примерах предполагается, что «событие» является событием нажатия клавиши. keyIdentifier - шестнадцатеричное число, представляющее значение Unicode для соответствующего символа. Используя keyIdentifier, числа с цифровой клавиатуры / клавиатуры и цифры над клавиатурой QWERTY будут иметь одинаковые значения, 48 - 57 (U + 0030 - U + 0039), даже с событием keyDown.

Значения Unicode в браузерах будут выглядеть как U + 0030 или U + 002F. Разберите эту строку, чтобы получить только шестнадцатеричное значение, затем используйте parseInt () с основанием 16, чтобы преобразовать ее в base-10.

0 голосов
/ 21 марта 2017

вы можете использовать keydown и определять цифровые клавиши.Я сделал это, используя следующий код.Вычтите 48 из числовых ключей, прежде чем интерпретировать ключ

function navigate(e) {
        var keyCode = e.keyCode || e.which;
        if (keyCode >= 96 && keyCode <= 105) {
            // Numpad keys
            keyCode -= 48;
        }  
        var txtVal = String.fromCharCode(keyCode);
...