Лучший кросс-браузерный метод для захвата CTRL + S с JQuery? - PullRequest
150 голосов
/ 18 сентября 2008

Мои пользователи хотели бы иметь возможность нажать Ctrl + S , чтобы сохранить форму. Есть ли хороший кросс-браузерный способ захвата комбинации клавиш Ctrl + S и отправки моей формы?

Приложение построено на Drupal, поэтому доступен jQuery.

Ответы [ 16 ]

0 голосов
/ 13 марта 2018

Это было мое решение, которое гораздо легче читать, чем другие предложения, может легко включать другие комбинации клавиш и было протестировано на IE, Chrome и Firefox:

$(window).keydown(function(evt) {
    var key = String.fromCharCode(evt.keyCode);
    //ctrl+s
    if (key.toLowerCase() === "s" && evt.ctrlKey) {
        fnToRun();
        evt.preventDefault(true);
        return false;
    }
    return true;
});
0 голосов
/ 07 июля 2017

Этот плагин, сделанный мной, может быть полезным.

Plugin

Вы можете использовать этот плагин, который вам необходим для предоставления кодов клавиш и функций, которые будут запускаться следующим образом

simulatorControl([17,83], function(){
 console.log('You have pressed Ctrl+Z');
});

В коде, который я показал, как выполнить для Ctrl + S . По ссылке вы получите подробную документацию. Плагин находится в разделе JavaScript Code of My Pen на Codepen.

0 голосов
/ 03 ноября 2016

Ответ Alan Bellows:! (E.altKey) добавлено для пользователей, которые используют AltGr при наборе текста (например, Польша). Без этого нажатия AltGr + S даст тот же результат, что и Ctrl + S

$(document).keydown(function(e) {
if ((e.which == '115' || e.which == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
    e.preventDefault();
    alert("Ctrl-s pressed");
    return false;
}
return true; });
0 голосов
/ 01 июля 2015

Я решил свою проблему на IE , используя alert("With a message") для предотвращения поведения по умолчанию:

window.addEventListener("keydown", function (e) {
    if(e.ctrlKey || e.metaKey){
        e.preventDefault(); //Good browsers
        if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { //hack for ie
            alert("Please, use the print button located on the top bar");
            return;
        }
    }
});
0 голосов
/ 06 января 2012

Это должно работать (адаптировано с https://stackoverflow.com/a/8285722/388902).

var ctrl_down = false;
var ctrl_key = 17;
var s_key = 83;

$(document).keydown(function(e) {
    if (e.keyCode == ctrl_key) ctrl_down = true;
}).keyup(function(e) {
    if (e.keyCode == ctrl_key) ctrl_down = false;
});

$(document).keydown(function(e) {
    if (ctrl_down && (e.keyCode == s_key)) {
        alert('Ctrl-s pressed');
        // Your code
        return false;
    }
}); 
0 голосов
/ 29 июля 2010

пример:

shortcut.add("Ctrl+c",function() {
    alert('Ok...');
}
,{
    'type':'keydown',
    'propagate':false,
    'target':document
});

использование

<script type="text/javascript" src="js/shortcut.js"></script>

ссылка для скачивания: http://www.openjs.com/scripts/events/keyboard_shortcuts/#

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...