Захват события нажатия клавиши «control» в JavaScript

#javascript #google-chrome #javascript-events #google-chrome-extension

#javascript #google-chrome #google-chrome-расширение #dom-события

Вопрос:

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

Комментарии:

1. Если запущена какая-либо программа, у которой есть прослушиватель для этого ключа на уровне ОС, тогда он не будет запускаться в js.

Ответ №1:

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

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

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

Комментарии:

1. Не уверен, что сказать, у меня это не работает. Удерживание нажатой клавиши control и никакой другой клавиши приводит только к появлению сообщений «CTRL UP» в журнале.

2. Это неправильный ответ. Смотрите ниже.

Ответ №2:

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

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