无法在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();
}
};
答案 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年使用setTimeout
我blogged 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...');
}