根据this,数字1
的代码值为49
,但代码下方无法正常运行。在用户按下数字1
的控制台中,可以看到:
"keyCode": 49,
"key": "1",
"charCode": 49,
"char": undefined,
"which": 49,
意味着1的代码确实是49
,但是如果与shift结合使用,它就不会在控制台中显示任何内容。
另一方面按shift + 1
时会显示:
"key": "!",
"code": "Digit1",
"location": 0,
"ctrlKey": false,
"shiftKey": true,
"altKey": false,
"metaKey": false,
"repeat": false,
"isComposing": false,
"charCode": 33,
"keyCode": 33,
"which": 33,
检测shift +任意数字的按键的正确方法是什么?
$(document).on('keypress', function(event) {
//console.log(event);
if (event.which === 49 && event.shiftKey) {
console.log("pressed shift + 1")
}
if( event.which === 65 && event.shiftKey ) {
alert('you pressed SHIFT+A');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 0 :(得分:1)
我需要做同样的事情。但是,仅使用keydown
是不够的。我们已经将所有代码库都转换为检查event.key
,因为这是推荐使用的属性。 ({which
,keyCode
和charCode
均已弃用。)
但是在一个地方,我们必须能够检测到Shift + 1
,因此我使用了:
var expectedKey '1'; // or w, or W, etc.
if (event.shiftKey) {
if (event.key == expectedKey || event.code == 'Digit' + expectedKey) {
event.code
提供了被按下的物理键,而不是键盘布局将其解释为的字符。
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key