2012-07-16 12 views
12

Stosując jeden z przykładów z poprzedniego pytania mam:jquery wydarzenie przyciśnięcie dla Cmd + S Ctrl + S

$(window).keypress(function(event) { 
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true; 
    $("form input[name=save]").click(); 
    event.preventDefault(); 
    return false; 
}); 

Jest także możliwe, aby zmienić to, aby pracować dla klucza cmd Mac?

Próbowałem już (!(event.which == 115 && (event.cmdKey || event.ctrlKey)) && !(event.which == 19)), ale to nie zadziałało.

+1

możliwe duplikat [? Jak mogę uchwycić Command + S w jQuery] (http://stackoverflow.com/questions/ 5833325/how-can-i-capture-commands-in-jquery) ':)' –

+0

Kluczowe zdarzenia są dość niespójne między przeglądarkami i systemem operacyjnym. Po prostu skopiuj mały przykład i sprawdź, które klawisze i modyfikatory są wyzwalane po naciśnięciu cmd + S. – Christoph

+0

Nie mogę tego powiedzieć na pewno, ale z reguły myślę, że nie chcesz zmieniać domyślnych zachowań przeglądarki (ctrl + s/cmd + s === "Zapisz stronę jako") –

Odpowiedz

22

Użyj event.metaKey wykryć Klawisz Rozkaz

$(document).keypress(function(event) { 
    if (event.which == 115 && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
     event.preventDefault(); 
     // do stuff 
     return false; 
    } 
    return true; 
}); 
+3

Brak nawiasu Typo. Próbowałem to zmienić, ale dostałem błąd: "Zmiany muszą składać się z co najmniej 6 znaków, czy jest jeszcze coś do poprawienia w tym poście?" głupi stackoverflow –

+6

Niestety to nie działa dla mnie w chrome (Wersja 27.0.1453.110). zawsze otwiera okno dialogowe "zapisz jako" ... - CTRL + S działa z drugiej strony –

+0

Słodki 'metaKey' – brasofilo

3

Do wykrywania ctrl+s i cmd+s można używać w ten sposób:

Working jsFiddle.

jQuery:

var isCtrl = false; 
$(document).keyup(function (e) { 
if(e.which == 17) isCtrl=false; 
}).keydown(function (e) { 
    if(e.which == 17) isCtrl=true; 
    if(e.which == 83 && isCtrl == true) { 
     alert('you pressed ctrl+s'); 
    return false; 
} 
}); 

source (includes all keyboard shorcuts and buttons)

+0

Dobrze, czy możesz wyjaśnić dlaczego jest to lepsze rozwiązanie niż druga odpowiedź? –

+0

Na moim MacBooku (Chrome i Safari) cmd + s nie działa, dopóki nie naciśniesz ctr + s. Potem obie działają. Dziwne. –

+0

@ T.BrianJones to samo stało się dla mnie w różnych przeglądarkach. Domyślam się, że funkcja 'save' przeglądarki zapobiega naszej funkcji /: –

1

Działa to dla mnie:

$(document).keypress(function(event) { 
    if ((event.which == 115 || event.which == 83) && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
     event.preventDefault(); 
     // do stuff 
     return false; 
    } 
    return true; 
});