使用JavaScript的键盘快捷键,在Firefox上无法正常工作

时间:2013-09-25 05:50:11

标签: javascript

无法在Firefox中禁用Ctrl + S的默认行为。 无法在IE中禁用Ctrl + P行为

我的代码有什么问题......?我弄清楚了。 感谢。

// Keyboard shortcuts
var isCtrl = false;
document.onkeyup = function(e) {
    if (e.which === 17) {
        isCtrl = false;
    }
};
document.onkeydown = function(e) {
    if (e.which === 17) {
        isCtrl = true;
    }
    if (e.which === 79 && isCtrl === true) {
        // Ctrl+O
        e.preventDefault();
        Open();
    }
    if (e.which === 83 && isCtrl === true) {
        // Ctrl+S
        e.preventDefault();
        Save();
    }
    if (e.which === 80 && isCtrl === true) {
        // Ctrl+P
        e.preventDefault();
        Print();
    }
    if (e.which === 72 && isCtrl === true) {
        // Ctrl+H
        e.preventDefault();
        Help();
    }
};

3 个答案:

答案 0 :(得分:0)

你可以使用:

e = e || window.event;
e.which = e.which || e.keyCode;

样品:

document.onkeypress = function(e) {
    e = e || window.event;
    e.which = e.which || e.keyCode;
    if (e.which === 79 && e.ctrlKey) {
        // Ctrl+O
        e.preventDefault();
        Open();
    }
    if (e.which === 83 && e.ctrlKey) {
        // Ctrl+S
        e.preventDefault();
        Save();
    }
    if (e.which === 80 && e.ctrlKey) {
        // Ctrl+P
        e.preventDefault();
        Print();
    }
    if (e.which === 72 && e.ctrlKey) {
        // Ctrl+H
        e.preventDefault();
        Help();
    }
};

答案 1 :(得分:0)

您正在使用e.which来确定密钥是否为控件以及密钥代码本身

就像说if(e.which==17 && e.which=79); 看看我得到了什么? 使用e.ctrlKey确定是否按下了控件     document.onkeyup = function(e){         e.which = e.which || e.charCode;

        isCtrl = e.ctrlKey

};
document.onkeydown = function(e) {
    e.which = e.which || e.charCode;

        isCtrl = e.ctrlKey
    if (e.which === 79 && isCtrl === true) {
        // Ctrl+O
        e.preventDefault();
        Open();
    }
    if (e.which === 83 && isCtrl === true) {
        // Ctrl+S
        e.preventDefault();
        Save();
    }
    if (e.which === 80 && isCtrl === true) {
        // Ctrl+P
        e.preventDefault();
        Print();
    }
    if (e.which === 72 && isCtrl === true) {
        // Ctrl+H
        e.preventDefault();
        Help();
    }
};

的javascript

答案 2 :(得分:0)

简而言之,您需要在2014年使用setTimeoutblogged about this issue。这有点像黑客但它有效......

window.onkeypress = function(event)
{
 if (event.ctrlKey && event.key=='s')
 {
  event.preventDefault();
  setTimeout(function() {form_submit(event);},1);
 }
}


function form_submit(event)
{
 alert('trigger your code here...');
}