数字键盘的 keyCode 值?

keyCode values for numeric keypad?

提问人:DanielAttard 提问时间:11/2/2012 最后编辑:ROMANIA_engineerDanielAttard 更新时间:1/23/2023 访问量:200104

问:

数字小键盘上的数字是否与键盘顶部的数字具有不同的键码?

以下是一些应该在 keyup 事件上运行的 JavaScript,但前提是 keycode 介于 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 值,但我如何找出它们是什么?

javascript jquery web应用程序 数字键盘

评论

10赞 Andreas Eriksson 11/2/2012
您可以提醒/记录 e.keyCode 并给自己答案。
2赞 ROMANIA_engineer 12/20/2015
它们 () 是不同的,因为这些事件与物理键相关,而这些键是不同的。如果使用 from ,则两个键的值相同。e.keyCodekeyupkeydowne.whichkeypress
1赞 Prashanth 10/26/2016
所有键码参考(带演示):codeforeach.com/javascript/...
0赞 Raghurocks 11/2/2012
这是键盘上每个键的指南 help.adobe.com/en_US/AS2LCR/Flash_10.0/......

答:

182赞 Rory McCrossan 11/2/2012 #1

键码不同。键盘 0-9 是96105

您的陈述应该是:if

if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) { 
  // 0-9 only
}

以下是密钥代码的参考指南


--更新--

这是一个旧的答案,已被弃用。现在有其他方法可以实现这一点,例如使用:keyCodekey

if ((e.key >= 48 && e.key <= 57) || (e.key >= 96 && e.key <= 105)) { 
  // 0-9 only
}

这是event.key的输出测试器,感谢@Danziger提供的链接。

评论

10赞 Noumenon 4/27/2016
需要注意的是,这在 jQuery 的 .keypress() 事件中是不同的,该事件报告数字的 48-57,无论它们来自键盘还是数字键盘。
2赞 Prashanth 10/26/2016
所有键码参考(带演示):codeforeach.com/javascript/...
0赞 reyhane 10/15/2019
您应该在 keyDown 事件中使用 KeyValue 而不是 keyCode
1赞 Jaykumar Patel 12/9/2019
1+ 这里还有键代码 blogs.longwin.com.tw/lifetype/key_codes.html 和演示测试在这里 speedysense.com/javascript-keyboard-event 按键事件。
4赞 Danziger 9/27/2020
e.keyCode已弃用。 简化了很多。此外,您无需使用静态图表来查找所需的密钥代码/标识符,只需单击此处的实际密钥即可查看它们:keyjs.deve.key
9赞 Eugene 11/2/2012 #2

您可以简单地运行

$(document).keyup(function(e) {
    console.log(e.keyCode);
});

在浏览器控制台中查看按下的键的代码。

或者你可以在这里找到关键代码:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Numpad_keys

评论

15赞 R Brill 2/20/2015
如果您使用的是没有数字小键盘的键盘,则此答案可能没有用
-2赞 Mike 9/11/2014 #3

您可以使用它来轻松计算 keyCodes:

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

http://jsfiddle.net/vecvc4fr/

6赞 Prashanth 10/26/2016 #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

25赞 A. Morel 1/9/2018 #5

******************* 不要使用 KEYCODE !!! ******************

keyCode的问题在于避免键盘顶部带有数字的组合键,我们必须在键“Shift”和“Alt”上添加一个勾选,以避免特殊字符,例如e @ &“ { } ...

一个最简单的解决方案是将e.key转换为一个数字,并检查转换是否给出了 NaN

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

如果 e.key 为 null空格则小心,它给出 0

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

评论

1赞 Almas Dusal 12/16/2020
我们可以使用 parseInt except Number,然后当它为空格或 null 时,它会生成 NaN。
1赞 Almas Dusal 12/16/2020
我们可能要提防键盘语言布局的另一件事。某些键盘布局将默认数字键更改为符号。
0赞 fred727 1/13/2021
干得好@AlmasDusal。测试也可以变成 if ( parseInt(e.key) >= 0 ) ...
2赞 Jelle den Burger 4/9/2018 #6

对于想要 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;
    }

它使用第一个答案的逻辑。

0赞 L1ghtk3ira 8/1/2018 #7

@.A. Morel 的答案 我发现这是最易于理解的解决方案,占地面积小。如果您想要较小的代码量,只是想在上面添加,此解决方案是对 Morel 的修改,适用于不允许任何类型的字母,包括输入臭名昭著的“e”字符。

function InputTypeNumberDissallowAllCharactersExceptNumeric() {
  let key = Number(inputEvent.key);
  return !isNaN(key);
}
2赞 jabacchetta 8/19/2019 #8

要添加到其他一些答案中,请注意:

  • keyup按键不同keydown
  • 如果要使用 从 中获取实际数字,则需要先将 .String.fromCharCode()keyupkeyCode

下面是一个自记录示例,用于确定键是否为数字,以及它是哪个数字(示例使用 lodash 中的 range 函数)。

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);

评论

0赞 Cyntech 10/20/2019
这个答案解决了我的问题;出于某种原因,numpad 2 的 keyCode 在使用 String.fromCharCode() 时给出了值 b。
0赞 Hoshi 9/4/2020
或者,在理解了您的答案之后:String.fromCharCode( (e.which > 95 && e.which < 107 ? e.which - 48 : e.which )).match(/\d/);
0赞 Matt Browne 7/1/2023
注意:使用 会降低代码的效率,不仅因为它调用了另一个函数,还因为它不必要地创建了一个包含所有这些数字的数组,而不仅仅是比较和range>= 96<= 106
1赞 Tabares 10/24/2019 #9

您可以使用密钥代码页来查找:

事件代码

以区分数字键盘。

https://keycode.info/

function getNumberFromKeyEvent(event) {
   if (event.code.indexOf('Numpad') === 0) {
      var number = parseInt(event.code.replace('Numpad', ''), 10);
      if (number >= 0 && number <= 9) {
           // numbers from numeric keyboard
      }
   }
}
2赞 SMAG 3/31/2020 #10

是的,它们是不同的,虽然很多人都提出了一个很好的建议,即使用console.log自己查看。但是,我没有看到有人提到 event.location,您可以使用它来确定数字是来自键盘还是来自主键盘/通用键的顶部。当您需要通常确定击键是否来自键盘的某个区域时,这种方法最适合于特定键可能更好。event.location === 3event.location === 0event.key

1赞 Bariscode 5/6/2020 #11

Docs 说与 onkeyxxx 事件相关的事件顺序:

  1. onkeydown
  2. onkeypress
  3. onkeyup

如果您使用如下代码,它也适合退格并输入用户交互。之后,您可以在 onKeyPress 或 onKeyUp 事件中执行您想要的操作。 如果值不是 number、backspace 或 enter,则代码块触发 event.preventDefault 函数。

onInputKeyDown = event => {
    const { keyCode } = event;
    if (
      (keyCode >= 48 && keyCode <= 57) ||
      (keyCode >= 96 && keyCode <= 105) ||
      keyCode === 8 || //Backspace key
      keyCode === 13   //Enter key
    ) {
    } else {
      event.preventDefault();
    }
  };
0赞 Almas Dusal 12/16/2020 #12

莫雷尔@A回答清楚了一点。您可能会注意键盘语言布局。某些键盘布局将默认数字键更改为符号。

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

评论

0赞 fred727 1/13/2021
或者只是 : console.log( parseInt(e.key) >= 0 ?“is numeric” : “is not numeric” )
0赞 HANNAN Std 1/21/2023 #13

您需要检查转换为数字是否介于 0-9 之间。 因此,我们可以创建一个范围数组 0-9 并检查是否在此范围内。event.keyArray.from(Array(10).keys())event.key

const isNumeric = Array.from(Array(10).keys()).includes(Number(event.key));

评论

0赞 Shawn Hemelstrand 1/22/2023
虽然此代码片段可能是解决方案,但包含解释确实有助于提高帖子的质量。请记住,您将来正在为读者回答问题,而这些人可能不知道您提出代码建议的原因。