预防保存弹出窗口的默认在 chrome 中工作,但在火狐中不起作用

preventDefault for save popup is working in chrome but not in firefox

本文关键字:chrome 工作 不起作用 火狐 默认 保存 窗口      更新时间:2023-09-26

嗨,我喜欢阻止ctrl + s(保存)的默认行为,所以我尝试了以下代码

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

但这仅在 chrome 中阻止而不是在火狐中。在Firefox中,保存对话框弹出为什么会发生这种情况,或者我错过了什么。有什么帮助吗?

试试这个....

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

使用警报将完成线程执行,只有在单击警报的"确定"按钮后,才会再次选取线程。 我只能想象,在这一点上,"preventDefault"还没有被Firefox确认(即使您在警报之前调用它),它继续显示"另存为"对话框。

我使用 setTimeout 将警报延迟 1 秒,尽管我确信使用 0 会产生相同的效果......只需将显示警报的函数(现在是异步)推送到执行堆栈的后面,这将允许浏览器完成 preventDefault 的执行。

我知道你不想要"警报",但我想我会提供行为的解释。

尝试以下代码:

$(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