Слушать CTRL+N с помощью JavaScript

Я пытаюсь связать комбинацию клавиш "CTRL+N" следующим образом:

var ctrlPressed = false;
    var nCode = 78;
    var ctrlCode = 224;
    var cmdCode = 17;
    document.addEventListener ("keydown", function(e){
        if( e.keyCode == ctrlCode || e.keyCode == cmdCode){
            ctrlPressed = true;
        }else{
            ctrlPressed = false;
        }
        console.log(e.keyCode);
    });
    document.addEventListener ("keyup", function(e){
        if(ctrlPressed && e.keyCode == nCode){
             e.preventDefault();
            nou_element(parent);
            return;
        }
    });

Пожалуйста, обратите внимание: jQuery не доступен

Дело в том, что e.preventDefault(), похоже, не переопределяет функциональность окна создания, встроенную в Bowser

как я могу обойти?

1 ответ

Решение

Ваш код имеет некоторые проблемы:

  • Не все браузеры позволяют запрещать действия клавиатуры по умолчанию (например, Chromium 30)

  • Чтобы предотвратить их на других (например, Firefox или IE8), вы должны предотвратить keydown событие вместо keyup один, потому что тогда уже слишком поздно.

  • Чтобы проверить, нажата ли клавиша Ctrl, используйте e.ctrlKey

Демо (для Firefox)

document.addEventListener("keydown", function(e){
    if(e.ctrlKey && e.keyCode == /*key code*/) {
        e.preventDefault();
        /* Do whatever */
    }
});

Демо (для Firefox и IE8)

document.onkeydown =  function(e){
    e = e || window.event;
    if(e.ctrlKey && e.keyCode == nCode) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
        /* Do whatever */
        return false;
    }
};
Другие вопросы по тегам