【问题标题】:Holding down 'ctrl+enter' gives a different keycode for keypress event than just straight 'enter' - But only on Windows按住 'ctrl+enter' 会为按键事件提供不同的键码,而不仅仅是直接的 'enter' - 但仅在 Windows 上
【发布时间】:2014-05-27 12:31:00
【问题描述】:

我有以下 Javascript:

$(function(){
    $("#foo").keypress(function (event) {
        if (event.keyCode == 13) {
            console.log(event.ctrlKey ? "Ctrl+Enter (13)" : "Enter (13)");   
        }
        else if (event.keyCode == 10) {
            console.log(event.ctrlKey ? "Ctrl+Enter (10)" : "Enter (10)");
        }
    });
});

这里的Foo是一个输入框。

在 Windows 下,仅在 Windows 下 - 按住 CTRL 修饰符将 keyCode 从 13 更改为 10。因此,如果我执行 Enter vs. CTRL + Enter,我在控制台看到Enter (13)Ctrl+Enter (10)。无论浏览器如何,Mac OS 和 Linux 都不会这样做。

这是为什么?

http://jsfiddle.net/K6NhF/ 玩小提琴

【问题讨论】:

  • 在许多程序中它们有不同的含义。通常一个是提交热键,而另一个是换行。它也应该适用于 Linux,至少它对我有用。用 Fedora 20 和当前的 Chrome 测试了小提琴。
  • OSX 正在为我做这件事。 OSX 10.9.2 上的 Chrome 34
  • 也许是与语言环境相关的事情?我让其他几个人在#jquery IRC 频道中试用它,他们报告说收到了Ctrl+Enter (13)
  • 这不仅仅是 Windows。这是浏览器/程序相关的。几年前经历过这个问题。现在可能是一个更狭窄的问题,但 keydown/keyup 一直更可靠。答案here 更好地解释了差异。此外,在 JS here 中获取有关关键事件的更多信息。这是一个jsFiddle,用于测试关键事件中的差异。

标签: javascript jquery input


【解决方案1】:

在不同的浏览器中有很多不一致的地方,这里有一篇描述它们的文章 JavaScript Madness: Keyboard Events

还有一个用于规范化 javascript 中的键码的库 keycode.js

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多