Ctrl+S preventDefault в Chrome

Я хочу поймать Ctrl+S в Chrome и предотвратите поведение браузера по умолчанию для сохранения страницы. Как?

(просто разместив вопрос и ответ, как я был после этого в течение довольно долгого времени и не нашел решения)

3 ответов


насколько я вижу, секрет соуса в том, что Ctrl+S не запускает событие нажатия клавиши, только событие keydown.

используя С помощью jQuery.горячие клавиши:

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

только с jQuery:

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

изменить 2012.12.17 - jQuery.горячие клавиши говорит

горячие клавиши не отслеживаются, если вы находитесь внутри элемента ввода (если вы явно привязать горячую клавишу непосредственно к входу). Этот помогает избежать конфликт с обычным пользовательским вводом.


"позаимствовали" у переопределение control+s (сохранить функциональность) в браузере

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

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;
        }
    }
};