提问人:DanielAttard 提问时间:11/2/2012 最后编辑:ROMANIA_engineerDanielAttard 更新时间:1/23/2023 访问量:200104
数字键盘的 keyCode 值?
keyCode values for numeric keypad?
问:
数字小键盘上的数字是否与键盘顶部的数字具有不同的键码?
以下是一些应该在 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 值,但我如何找出它们是什么?
答:
键码不同。键盘 0-9 是96
105
您的陈述应该是:if
if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) {
// 0-9 only
}
以下是密钥代码的参考指南
--更新--
这是一个旧的答案,已被弃用。现在有其他方法可以实现这一点,例如使用:keyCode
key
if ((e.key >= 48 && e.key <= 57) || (e.key >= 96 && e.key <= 105)) {
// 0-9 only
}
这是event.key的输出测试器,感谢@Danziger提供的链接。
评论
e.keyCode
已弃用。 简化了很多。此外,您无需使用静态图表来查找所需的密钥代码/标识符,只需单击此处的实际密钥即可查看它们:keyjs.deve.key
您可以简单地运行
$(document).keyup(function(e) {
console.log(e.keyCode);
});
在浏览器控制台中查看按下的键的代码。
或者你可以在这里找到关键代码:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Numpad_keys
评论
您可以使用它来轻松计算 keyCodes:
$(document).keyup(function(e) {
// Displays the keycode of the last pressed key in the body
$(document.body).html(e.keyCode);
});
数字小键盘上的数字和键盘顶部的数字的 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
******************* 不要使用 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
评论
对于想要 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;
}
它使用第一个答案的逻辑。
@.A. Morel 的答案 我发现这是最易于理解的解决方案,占地面积小。如果您想要较小的代码量,只是想在上面添加,此解决方案是对 Morel 的修改,适用于不允许任何类型的字母,包括输入臭名昭著的“e”字符。
function InputTypeNumberDissallowAllCharactersExceptNumeric() {
let key = Number(inputEvent.key);
return !isNaN(key);
}
要添加到其他一些答案中,请注意:
keyup
与按键
不同keydown
- 如果要使用 从 中获取实际数字,则需要先将 .
String.fromCharCode()
keyup
keyCode
下面是一个自记录示例,用于确定键是否为数字,以及它是哪个数字(示例使用 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);
评论
String.fromCharCode( (e.which > 95 && e.which < 107 ? e.which - 48 : e.which )).match(/\d/);
range
>= 96
<= 106
您可以使用密钥代码页来查找:
事件代码
以区分数字键盘。
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
}
}
}
是的,它们是不同的,虽然很多人都提出了一个很好的建议,即使用console.log自己查看。但是,我没有看到有人提到 event.location,您可以使用它来确定数字是来自键盘还是来自主键盘/通用键的顶部。当您需要通常确定击键是否来自键盘的某个区域时,这种方法最适合于特定键可能更好。event.location === 3
event.location === 0
event.key
Docs 说与 onkeyxxx 事件相关的事件顺序:
- onkeydown
- onkeypress
- 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();
}
};
莫雷尔@A回答清楚了一点。您可能会注意键盘语言布局。某些键盘布局将默认数字键更改为符号。
let key = parseInt(e.key)
if (isNaN(key)) {
console.log("is not numeric")
}
else {
console.log("is numeric")
}
评论
您需要检查转换为数字是否介于 0-9 之间。
因此,我们可以创建一个范围数组 0-9 并检查是否在此范围内。event.key
Array.from(Array(10).keys())
event.key
const isNumeric = Array.from(Array(10).keys()).includes(Number(event.key));
评论
e.keyCode
keyup
keydown
e.which
keypress