在Javascript中捕获"控制"keydown按事件

one*_*elf 4 javascript google-chrome javascript-events google-chrome-extension

我试图弄清楚用户何时使用Javascript在HTML页面中按下"control"键.

在下面的代码"CTRL UP"将出现预期,但"CTRL DOWN"才会出现,如果我按另一个键,例如"移动".

<html>
<head>
<script type="text/javascript">
window.addEventListener("keyup", function(event) {
  // Bind to both command (for Mac) and control (for Win/Linux)
  if (event.ctrlKey) {
    console.log("CTRL UP");
  }
}, false);

window.addEventListener("keydown", function(event) {
  // Bind to both command (for Mac) and control (for Win/Linux)
  if (event.ctrlKey) {
    console.log("CTRL DOWN");
  }
}, false);

</script>
</head>
<body>
Ctrl Demo
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

有没有办法让"CTRL DOWN"键事件按预期工作,当按下ctrl并按下它时?

注意:我正在尝试将其用于Google Chrome扩展程序,因此使用Chrome特定的API或技巧来完成此工作完全没问题.我在Ubuntu上使用Google Chrome 15.0.874.83测试版.

Mil*_*les 20

您的代码适用于我,以下是jQuery.(铬)

$(window).keydown(function(e){
    if (e.ctrlKey)
        console.log('Control Down');
});
Run Code Online (Sandbox Code Playgroud)

使用警报有点尴尬,因为它会阻止进程,并且您不会看到对话框启动时发生的任何键状态更改.我建议使用console.info/log/debug

  • 不知道该说什么,这对我不起作用。按住 control 和_no_其他键只会在日志中产生“CTRL UP”消息。 (2认同)
  • 这不是正确的答案。请参阅下面的一项。 (2认同)

Tim*_*own 9

如果您只想检测Ctrl自己按下的键,以下内容将起作用(尽管请记住addEventListenerIE <9中不支持,您需要使用attachEventonkeydown代替):

window.addEventListener("keydown", function(event) {
    // Bind to both command (for Mac) and control (for Win/Linux)
    if (event.keyCode == 17) {
        alert("Ctrl");
    }
}, false);
Run Code Online (Sandbox Code Playgroud)