在Javascript中捕获“控制”keydown按事件

时间:2011-10-18 00:30:38

标签: 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>

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

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

2 个答案:

答案 0 :(得分:19)

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

$(window).keydown(function(e){
    if (e.ctrlKey)
        console.log('Control Down');
});

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

答案 1 :(得分:9)

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

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