Подтвердить что ты не робот

Нажмите кнопку захвата, не помещая элемент ввода на страницу?

Как захватить нажатие клавиши, например, Ctrl + Z, не помещая элемент ввода на странице в JavaScript? Кажется, что в IE события нажатия клавиш и клавиш могут быть привязаны только к элементам ввода (поля ввода, текстовые поля и т.д.)

4b9b3361

Ответ 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