Подтвердить что ты не робот

Ctrl + S preventDefault в Chrome

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

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

4b9b3361

Ответ 1

Насколько я понимаю, секретный соус состоит в том, что Ctrl + S НЕ запускает событие keypress, только событие keydown.

Использование jQuery.hotkeys:

$(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.hotkeys говорит

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

Ответ 3

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

Ответ 4

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
            case 87://Block Ctrl+W --Not work in Chrome
                e.preventDefault();     
                e.stopPropagation();
            break;
        }
    }
};