用于保存弹出窗口的preventDefault工作在chrome但不在firefox中

时间:2013-10-03 09:51:54

标签: javascript jquery google-chrome firefox

您好我想阻止ctrl + s(保存)的默认行为,所以我尝试了下面的代码

jQuery(document).bind("keydown", function(e) {
  if(e.ctrlKey && (e.which == 83)) {
    e.preventDefault();
    alert("Ctrl+S");
    return false;
  }
}); 

但是这只能防止chrome不在firefox中。在firefox中弹出保存对话框,为什么会发生这种情况或者我错过了什么。有什么帮助吗?

2 个答案:

答案 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