【问题标题】:Handling the ctrl keys with keypress使用 keypress 处理 ctrl 键
【发布时间】:2015-12-31 07:21:25
【问题描述】:

我环顾四周,我知道您可以检测到 ctrl 键(ctrl+cctrl+v 等)与 javascript 中的 keydown 事件,它经常被使用,因此该事件不会被其他进程捕获但是我想通过 keypress 事件来处理它(目的是通过一个事件而不是 2 个事件进行处理,并希望在为同一功能使用其他键盘快捷键时允许一致性)现在似乎应该可以在所有按键事件对象具有 alt 的布尔属性之后,ctrlshift 等以及确实通过的按键事件的字符代码与按键本身不同(例如 z 按键事件是 charCode 122 其中 ctrl +z 按键事件是 charCode 26)。那么问题来了,有没有办法阻止默认拦截ctrl键,让keypress事件可以处理呢?

对于我的特定实例,我使用的是 chrome,但我也想要一般的答案。

更新

我发现所有默认的 ctrl 键都可以通过这样的 keydown 事件来防止(例如 ctrl+s 尝试保存页面)

$('element').keydown(function(event){
    if(event.ctrlKey){
        event.preventDefault();
    }
});

(注意:这只会阻止可预防的默认设置,例如无法阻止 chrome 中新标签的 ctrl+t)

但是这里的问题是这也阻止了 keypress 事件的发生是否有办法以具有 keypress 属性的方式将事件传递给 keypress 事件(这意味着现在将定义 charCode 之类的东西)

【问题讨论】:

    标签: javascript events keypress ctrl


    【解决方案1】:

    从它声明的另一个网站上读到这个 ​​-

    键盘事件是前端开发中比较狂野的部分之一。那里 是不一致和跨浏览器的问题。

    但是仍然有一些食谱可以帮助应对普通的 情况很容易。

    有以下键盘事件:

    按键
    一个键被按下。

    keypress
    按下了一个字符键。

    keyup
    一个键被释放。


    keypress 和 keydown 之间有根本的区别。

    Keydown 触发任何按键并提供扫描码。 Keypress 在 keydown 后触发并给出 char-code,但只保证字符键。

    鉴于此,keypress 无法捕获控制键,因为它不会生成字符。

    可以在此处找到有关更具体信息的更多信息。

    http://javascript.info/tutorial/keyboard-events

    希望对你有帮助

    【讨论】:

    • 我认为你错过了我想用按键事件来捕捉它的全部要点,这是问题的全部目的
    • 就像我特别说的,我知道你可以通过按键来捕捉它,但我想通过按键来实现
    • 我看到了你的问题。介意我改变我的答案。由于 keydown 和 keyup 与按键不同,您似乎无法执行此操作。
    • 是的,请按一下,这样您就知道这是一个更经过处理的 key down 和 key up 版本,它包括其他人没有的东西,例如 shift 和 ctrl 是同一事件的一部分。使用 keydown shift+a 给你两个事件 shift 和 a with keypress 它给你一个事件 A
    • 我已经更新了我的答案,包括为什么不能单独使用按键来捕获单独的控制键。如果您想更深入地了解它,我已经引用了该网站并为您提供了网站 URL。
    猜你喜欢
    • 2018-05-23
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多