Подтвердить что ты не робот

Значения keyCode для цифровой клавиатуры?

Имеются ли в цифрах на цифровой клавиатуре разные коды клавиш, чем цифры в верхней части клавиатуры?

Вот некоторый JavaScript, который должен запускаться в событии keyup, но только если код ключа находится между 48 и 57. Вот код:

$('#rollNum').keyup(function(e) {
    if(e.keyCode >= 48 && e.keyCode <= 57) { //0-9 only
        var max = 15;
        var textLen = $(this).val().length;
        var textLeft = max - textLen;
        . . . 

Моя проблема в том, что этот код работает только в ответ на цифры, введенные в верхней части клавиатуры, но не работает в ответ на цифры, введенные с цифровой клавиатуры.

Я думаю, что ответ должен состоять в том, что цифровая клавиатура имеет разные значения KeyCode, но как узнать, что это такое?

4b9b3361

Ответ 2

******************* Не используйте KEYCODE !!!! **************** **

Проблема с keyCode состоит в том, чтобы избежать сочетания клавиш с цифрами на верхней части клавиатуры, мы должны добавить проверку на клавиши "Shift" и "Alt" избегать специальных символов, таких как e @& "{}...

Самое простое решение - преобразовать e.key в число и проверить, дает ли преобразование NaN!

let key = Number(e.key)
if (isNaN(key) || e.key===null) {
  console.log("is not numeric")
}
else {
  console.log("is numeric")
}

Будьте осторожны, если e.key равен нулю, он дает 0 0!

Number(5)         // => 5
Number('5')       // => 5
Number(null)      // => 0
Number('chars')   // => NaN
Number(undefined) // => NaN

Ответ 4

keyCode отличается для чисел на цифровой клавиатуре и цифрах поверх клавиатуры.

keyCodes:

цифры на клавиатуре (0 - 9): 48 - 57
на цифровой клавиатуре (0 - 9): 96 - 105

Условие JavaScript:

if((e.keyCode >= 48 && e.keyCode <=57) || (e.keyCode >= 96 && e.keyCode <=105)) { 
    // entered key is a number
}

Ссылка для всех кодов клавиш (с демо): http://www.codeforeach.com/javascript/keycode-for-each-key-and-usage-with-demo

Ответ 5

Для тех, кто хочет решения CTRL + C, CTRL-V, перейдите по ссылке:

    /**
     * Retrieves the number that was pressed on the keyboard.
     *
     * @param {Event} event The keypress event containing the keyCode.
     * @returns {number|null} a number between 0-9 that was pressed. Returns null if there was no numeric key pressed.
     */
    function getNumberFromKeyEvent(event) {
        if (event.keyCode >= 96 && event.keyCode <= 105) {
            return event.keyCode - 96;
        } else if (event.keyCode >= 48 && event.keyCode <= 57) {
            return event.keyCode - 48;
        }
        return null;
    }

Использует логику первого ответа.

Ответ 6

Ответ @.A. Морель, я считаю, является лучшим, легким для понимания решением с небольшой площадью. Я просто хотел добавить сверху, если вы хотите меньший объем кода, это решение, являющееся модификацией Morel, хорошо работает, так как не допускает использование букв любого рода, включая вводимый пресловутый символ 'e'.

function InputTypeNumberDissallowAllCharactersExceptNumeric() {
  let key = Number(inputEvent.key);
  return !isNaN(key);
}

Ответ 7

Чтобы добавить к другим ответам, обратите внимание:

  • keyup и keydown отличаются от keypress
  • если вы хотите использовать String.fromCharCode() для получения фактической цифры из keyup, вам необходимо сначала нормализовать keyCode.

Ниже приведен пример самодокументирования, который определяет, является ли ключ числовым, а также каким номером он является (например, используется функция range из lodash).

const isKeypad = range(96, 106).includes(keyCode);
const normalizedKeyCode = isKeypad ? keyCode - 48 : keyCode;
const isDigit = range(48, 58).includes(normalizedKeyCode);
const digit = String.fromCharCode(normalizedKeyCode);

Ответ 8

Вы можете использовать это, чтобы легко найти коды ключей:

$(document).keyup(function(e) {
    // Displays the keycode of the last pressed key in the body
    $(document.body).html(e.keyCode);
});

http://jsfiddle.net/vecvc4fr/