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



无法禁用 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();
    }
};

您正在使用 e.this 来确定键是否是控件以及键码本身

这就像在说if(e.which==17 && e.which=79);看看我在说什么?使用e.ctrlKey确定是否按下了控件 document.onkeyup = function(e) { e.哪个 = e.哪个 ||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

您可以使用:

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();
    }
};
简而言之,

您需要使用setTimeout不幸的是,我在 2014 年写了关于这个问题的博客。这有点黑客,但它有效...

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...');
}

最新更新