您好我想阻止ctrl + s(保存)的默认行为,所以我尝试了下面的代码
jQuery(document).bind("keydown", function(e) {
if(e.ctrlKey && (e.which == 83)) {
e.preventDefault();
alert("Ctrl+S");
return false;
}
});
但是这只能防止chrome不在firefox中。在firefox中弹出保存对话框,为什么会发生这种情况或者我错过了什么。有什么帮助吗?
答案 0 :(得分:3)
试试这个......
$(document).bind("keydown", function(e) {
if(e.ctrlKey && (e.which == 83)) {
e.preventDefault();
setTimeout(function() {
alert("Ctrl+S");
}, 1000);
return false;
}
});
使用警报将完成线程执行,仅在单击警报的“确定”按钮后再次拾取线程。我只能想象,此时'firewallDefault'还没有得到Firefox的确认(即使你在警报之前调用它),它仍然会显示另存为对话框。
我已经使用setTimeout将警报延迟1秒,这将为浏览器提供足够的时间来处理preventDefault。
我知道你不想要'警觉',但我想我会解释这种行为。
答案 1 :(得分:0)
尝试以下代码:
$(document).ready(function(){
$(document).bind('keydown', function(event) {
//19 for Mac Command+S
if (!( String.fromCharCode(event.which).toLowerCase() == 's' && event.ctrlKey) && !(event.which == 19)) return true;
event.preventDefault();
console.log("Ctrl-s pressed");
return false;
});
});
JS小提琴:http://jsfiddle.net/dpHk9/
<强>解释强>
以下代码将unicode号转换为相应的字符:
String.fromCharCode(number) //returns A for 65
以下代码代表控制键:
event.ctrlKey
在MAC上,command+s
返回19