#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);