Как захватить нажатие клавиши, например, Ctrl + Z, не помещая элемент ввода на странице в JavaScript? Кажется, что в IE события нажатия клавиш и клавиш могут быть привязаны только к элементам ввода (поля ввода, текстовые поля и т.д.)
Нажмите кнопку захвата, не помещая элемент ввода на страницу?
Ответ 1
jQuery также имеет отличную реализацию, которая невероятно проста в использовании. Здесь вы можете реализовать эту функциональность в браузерах:
$(document).keypress(function(e){
var checkWebkitandIE=(e.which==26 ? 1 : 0);
var checkMoz=(e.which==122 && e.ctrlKey ? 1 : 0);
if (checkWebkitandIE || checkMoz) $("body").append("<p>ctrl+z detected!</p>");
});
Протестировано в IE7, Firefox 3.6.3 и Chrome 4.1.249.1064
Другой способ сделать это - использовать событие keydown и отслеживать event.keyCode. Однако, поскольку jQuery нормализует keyCode и charCode, используя event.which, их спецификация рекомендует использовать event.which в различных ситуациях:
$(document).keydown(function(e){
if (e.keyCode==90 && e.ctrlKey)
$("body").append("<p>ctrl+z detected!</p>");
});
Ответ 2
Для непечатаемых клавиш, таких как клавиши со стрелками и сочетания клавиш, такие как Ctrl-z, Ctrl-x, Ctrl-c, которые могут вызвать некоторые действия в браузере (например, внутри редактируемых документов или элементов), вы не можете получить событие нажатия клавиши во всех браузерах. По этой причине вы должны использовать keydown
вместо этого, если вам интересно подавить действие по умолчанию для браузера. Если нет, keyup
будет делать то же самое.
Присоединение события keydown
к document
работает во всех основных браузерах:
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.ctrlKey && evt.keyCode == 90) {
alert("Ctrl-Z");
}
};
Для полной справки я настоятельно рекомендую статью Джона Вольтера по обработке ключевых слов JavaScript.
Ответ 3
Код и обнаруживает ctrl + z
document.onkeyup = function(e) {
if(e.ctrlKey && e.keyCode == 90) {
// ctrl+z pressed
}
}
Ответ 4
Обнаружение нажатия клавиши, включая комбинации клавиш:
window.addEventListener('keydown', function (e) {
if (e.ctrlKey && e.keyCode == 90) {
// Ctrl + z pressed
}
});
Преимущество здесь в том, что вы не переписываете любые глобальные свойства, а вместо этого просто вводите побочный эффект. Нехорошо, но определенно намного менее гнусно, чем другие предложения здесь.
Ответ 5
document.onkeydown = KeyDown;
document.onkeypress = Keypress;
и др.
Работает для меня в IE