我正在尝试使用以下代码解析从小键盘输入的按键事件:
$('#myDiv').keydown(function(e) {
val = String.fromCharCode(e.which)
});
问题在于键盘数字键0-9
返回的keyCode是96-105
,根据fromCharCode()
的定义,它们对应小写字母a-i
。我该如何使数字键盘的按键事件解析为相应的数字?
我正在尝试使用以下代码解析从小键盘输入的按键事件:
$('#myDiv').keydown(function(e) {
val = String.fromCharCode(e.which)
});
问题在于键盘数字键0-9
返回的keyCode是96-105
,根据fromCharCode()
的定义,它们对应小写字母a-i
。我该如何使数字键盘的按键事件解析为相应的数字?
你不需要使用 keydown
事件,而是需要使用 keypress
事件。只有 keypress
事件能够提供关于键入字符的可靠信息。如果你将现有代码中的 keydown
替换为 keypress
,你的代码将会正常工作。
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);
}
});
<input type="text" id="theField">
keypress
。
KeyboardEvent.key 浏览器兼容性。
document.
querySelector('input').
addEventListener('keydown', event => console.log(event.key));
<input placeholder="Start typing...">
document.
querySelector('input').
addEventListener('keydown', event => console.log(event.code));
<input placeholder="Start typing...">
如果因为需要取消事件等原因而无法使用keypress,可以使用keydown来实现。使用以下测试条件的if()语句:
parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58
parseInt(event.originalEvent.keyIdentifier.substring(2),16) > 47 && parseInt(event.originalEvent.keyIdentifier.substring(2),16) < 58
你可以使用 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);
keypress
让它变得轻而易举! - nirazul