jQuery 按键箭头键

IT技术 javascript jquery keypress
2021-02-21 07:11:39

我试图在 jQuery 中捕获箭头键按下,但没有触发任何事件。

$(function(){
    $('html').keypress(function(e){
        console.log(e);
    });
});

这会为字母数字键生成事件,但删除、箭头键等不会生成事件。

不捕捉那些我做错了什么?

6个回答

您应该使用.keydown()因为.keypress()将忽略“箭头”,用于捕获键类型使用e.which

按结果屏幕聚焦(小提琴屏幕右下角),然后按箭头键查看它的工作。

笔记:

  1. .keypress()永远不会被 Shift、Esc 和 Delete 触发,但.keydown()会。
  2. 实际上.keypress()在某些浏览器中会由箭头键触发,但它不是跨浏览器,因此使用更可靠.keydown()

更多有用信息

  1. 您可以使用事件对象的.whichOr .keyCode- 一些浏览器不支持其中之一,但是当使用 jQuery 时,可以安全地使用两者,因为 jQuery 标准化了事物。(我更喜欢.which从来没有遇到过问题)。
  2. ctrl | alt | shift | META使用实际捕获的键检测按下,您应该检查事件对象的以下属性 - 如果它们被按下,它们将被设置为 TRUE:
  3. 最后 - 这里有一些有用的密钥代码(对于完整列表 - keycode-cheatsheet):

    • 输入:13
    • 最多:38
    • 向下:40
    • 右:39
    • 左:37
    • 退出:27
    • 空格键:32
    • 控制:17
    • 替代:18
    • 班次:16
不幸的是,使用 key down 会导致页面滚动。向事件添加一个 preventDefault() 以防止发生这种情况。
2021-05-01 07:11:39
@Isaac 伟大的补充编辑了答案 +1 - 请注意,它也将映射到 Windows 命令键。谢谢你。
2021-05-03 07:11:39
$(document).keydown(function(e) {
    console.log(e.keyCode);
});

Keypress 事件会检测箭头键,但不是在所有浏览器中。所以最好使用keydown。

这些是您应该在控制台日志中获得的键码:

  • 左 = 37
  • 向上 = 38
  • 右 = 39
  • 向下 = 40
keypress 可能会在某些带有箭头键的浏览器中触发,您是对的,但它在其他浏览器中的行为会有所不同,因此使用 keydown 会更好。
2021-04-28 07:11:39
它在 chrome 上对我不起作用。keydown 工作 引自api.jquery.com/keypress 请注意,keydown 和 keyup 提供了一个代码,指示按下了哪个键,而 keypress 指示输入了哪个字符。例如,小写的“a”将被 keydown 和 keyup 报告为 65,但被 keypress 报告为 97。所有事件都将大写“A”报告为 65。由于这种区别,在捕获特殊的击键时,例如箭头键,.keydown() 或 .keyup() 是更好的选择。
2021-05-08 07:11:39
我没有提到我只在 Firefox 上测试过。不,keypress向我显示 40 和 38 就像keydown.
2021-05-13 07:11:39

您可以通过以下方式检查是否按下了箭头键:

$(document).keydown(function(e){
    if (e.keyCode > 36 && e.keyCode < 41) 
      alert( "arrowkey pressed" );          
});

jsfiddle 演示

left = 37,up = 38, right = 39,down = 40

$(document).keydown(function(e) {
switch(e.which) {
    case 37:
    $( "#prev" ).click();
    break;

    case 38:
    $( "#prev" ).click();
    break;

    case 39:
    $( "#next" ).click();
    break;

    case 40:
    $( "#next" ).click();
    break;

    default: return;
}
e.preventDefault();

});

$('html') 将其更改为 $(document) 并将 keypress 更改为 keydown
2021-05-02 07:11:39
感谢您的答复。为了使其成为可用的答案,请考虑添加一些关于您的代码片段的作用、为什么它是正确的以及我在最初的问题中做错了什么的解释。
2021-05-14 07:11:39

请参考 JQuery 的链接

http://api.jquery.com/keypress/

它说

当浏览器注册键盘输入时,keypress 事件被发送到一个元素。这类似于 keydown 事件,不同之处在于修饰符和非打印键(例如 Shift、Esc 和 delete 会触发 keydown 事件而不是 keypress 事件)。根据平台和浏览器的不同,可能会出现两个事件之间的其他差异。

这意味着您不能在箭头的情况下使用按键。