用javascript听'CTRL + N'

时间:2013-12-07 17:07:21

标签: javascript keydown preventdefault keyup

我正在尝试绑定'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 个答案:

答案 0 :(得分:2)

您的代码存在一些问题:

  • 并非所有浏览器都允许您阻止默认键盘操作(如Chromium 30)

  • 要防止其他人(如Firefox或IE8),您必须阻止keydown事件而不是keyup事件,因为那时为时已晚。

  • 要检查是否按下 Ctrl 键,请使用e.ctrlKey

Demo(适用于Firefox)

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

Demo(适用于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;
    }
};