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