Захват события нажатия клавиши «контроль» в Javascript - PullRequest
4 голосов
/ 18 октября 2011

Я пытаюсь выяснить, когда пользователь нажимает клавишу «control» на странице HTML с использованием Javascript.

В следующем коде «CTRL UP» будет отображаться, как и ожидалось, но «CTRL DOWN»появится только в том случае, если я также нажму другую клавишу, например «shift».

<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, поэтому использование специальных API или трюков Chrome для этой цели вполне подойдет.Я использую Google Chrome 15.0.874.83 beta на Ubuntu.

Ответы [ 2 ]

19 голосов
/ 18 октября 2011

Ваш код работает для меня, как и следующий jQuery. (Хром)

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

Использование оповещения немного неудобно, потому что оно блокирует процесс, и вы не увидите никаких изменений состояния клавиш, которые происходят, когда диалоговое окно открыто. Я рекомендую использовать console.info/log/debug

9 голосов
/ 18 октября 2011

Если вы просто хотите обнаружить нажатие клавиши Ctrl самостоятельно, сработает следующее (хотя имейте в виду, что addEventListener не поддерживается в IE <9, где вам нужноиспользовать <code>attachEvent или onkeydown вместо):

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