1

此处的 jsfiddle - http://jsfiddle.net/sueM7/4/ - 当您在结果窗口中输入 Ctrl+S 时会弹出“另存为”对话框,即使代码包含 e.preventDefault(); 问题是 JavaScript 第 5 行的 prompt() 。如果您注释掉第 5 行,则 e.preventDefault() 会正确阻止“另存为”对话框。

有谁知道这里发生了什么,以及如何运行提示行并阻止“另存为”?

谢谢。

window.addEventListener('keydown', function (e) {
    if (e.ctrlKey && e.keyCode === 83) {
        e.preventDefault();
        console.log("got Ctrl+S");
 var groupName = prompt("Group Name: ", "abc");
    }
}, false);
4

1 回答 1

0

事实证明,Firefox 的 alert() 显然有一些非常棘手的非同步性,我认为 prompt() 可能会给你带来同样的问题。请参阅在 Firefox 中无法覆盖 Ctrl+S

建议的答案是:

$(document).bind('keydown', 'Ctrl+s', function(event) {
  event.preventDefault();
  event.stopImmediatePropagation();
  alert('saving?');
  return false;
});

关键似乎是设法在 Firefox 运行异常并在弹出警报/提示窗口时触发默认操作之前调用预防措施。如果这不起作用,我会尝试一个短计时器 - 诚然,这是一个肮脏的黑客攻击 - 在调用 prompt() 之前给 Firefox 100-150 毫秒的时间让它一起行动。这太短了,不会在这个用例中导致明显的界面延迟,它应该可以帮助修复有关用户警报的 Firefox 错误/功能。

于 2013-11-06T20:14:10.277 回答