在Chrome中按Ctrl + S preventDefault

zup*_*upa 37 javascript jquery google-chrome preventdefault

我想在Chrome中捕获Ctrl+ S,并阻止默认浏览器行为来保存页面.怎么样?

(只是发布问题和答案,因为我在这之后很长一段时间没找到解决方案)

zup*_*upa 52

据我所见,秘诀就是,Ctrl+ S不会触发按键事件,只会触发keydown事件.

使用jQuery.hotkeys:

$(document).bind('keydown', 'ctrl+s', function(e) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
});
Run Code Online (Sandbox Code Playgroud)

只有jQuery:

$(document).bind('keydown', function(e) {
  if(e.ctrlKey && (e.which == 83)) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
  }
});
Run Code Online (Sandbox Code Playgroud)

编辑2012.12.17 - jQuery.hotkeys说

如果您在输入元素内部,则不会跟踪热键(除非您将热键直接绑定到输入).这有助于避免与普通用户输入冲突.

  • 当聚焦textarea或输入字段时,jQuery.hotkeys似乎不捕获事件. (3认同)

Bum*_*2na 15

浏览器中的Overriding control + s(保存功能) "借用"

document.addEventListener("keydown", function(e) {
  if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
    e.preventDefault();
    alert('captured');
  }
}, false);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在 2k21 中,[`keyCode`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode) 已弃用,[推荐](https://developer.mozilla. org/en-US/docs/Web/API/KeyboardEvent/key) 现在使用 `keyboardEvent.key === 's'`...实际上,当我可以编辑时为什么要评论 >:D (3认同)

小智 6

document.onkeydown = function (e) {
    e = e || window.event;//Get event
    if (e.ctrlKey) {
        var c = e.which || e.keyCode;//Get key code
        switch (c) {
            case 83://Block Ctrl+S
                e.preventDefault();     
                e.stopPropagation();
            break;
        }
    }
};
   
Run Code Online (Sandbox Code Playgroud)