Я хочу поймать Ctrl + S в Chrome и предотвратить поведение браузера по умолчанию для сохранения страницы. Как?
(Просто опубликуя вопрос и ответ, поскольку я был после этого довольно долгое время и не нашел решения)
Я хочу поймать Ctrl + S в Chrome и предотвратить поведение браузера по умолчанию для сохранения страницы. Как?
(Просто опубликуя вопрос и ответ, поскольку я был после этого довольно долгое время и не нашел решения)
Насколько я понимаю, секретный соус состоит в том, что 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 говорит
Горячие клавиши не отслеживаются, если вы находитесь внутри элемента ввода (если только вы не явно привязать горячую клавишу непосредственно к входу). Это помогает избежать конфликт с обычным вводом текста.
"Заимствован" из Переопределение управления + с (сохранение функциональности) в браузере
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;
}
}
};
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;
}
}
};