Odpowiedzi:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
Kody kluczy mogą się różnić w różnych przeglądarkach, więc może być konieczne sprawdzenie więcej niż tylko 115.
keydownzamiast keypressw chrome
To działa dla mnie (używając jquery) do przeciążenia Ctrl+ S, Ctrl+ Fi Ctrl+ G:
$(window).bind('keydown', function(event) {
if (event.ctrlKey || event.metaKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault();
alert('ctrl-s');
break;
case 'f':
event.preventDefault();
alert('ctrl-f');
break;
case 'g':
event.preventDefault();
alert('ctrl-g');
break;
}
}
});
else ifnie zadziała, ponieważ oryginalna ifinstrukcja będzie już oceniona jako prawdziwa. Będziesz musiał umieścić swój kod przed oryginalnym ifoświadczeniem, zamieniając oryginał w plik else if.
Możesz użyć biblioteki skrótów do obsługi rzeczy specyficznych dla przeglądarki.
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
To rozwiązanie jQuery działa dla mnie w Chrome i Firefox, zarówno dla Ctrl+, jak Si Cmd+ S.
$(document).keydown(function(e) {
var key = undefined;
var possible = [ e.key, e.keyIdentifier, e.keyCode, e.which ];
while (key === undefined && possible.length > 0)
{
key = possible.pop();
}
if (key && (key == '115' || key == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
e.keyzamiast e.which;
Ten działał dla mnie na Chrome ... z jakiegoś powodu event.whichzwraca mi duże S (83), nie wiem dlaczego (niezależnie od stanu Caps Lock), więc użyłem fromCharCodei toLowerCasepo prostu po bezpiecznej stronie
$(document).keydown(function(event) {
//19 for Mac Command+S
if (!( String.fromCharCode(event.which).toLowerCase() == 's' && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-s pressed");
event.preventDefault();
return false;
});
Jeśli ktoś wie, dlaczego dostaję 83 a nie 115 to z przyjemnością usłyszę, również jeśli ktoś testuje to na innych przeglądarkach to chętnie usłyszę czy to działa czy nie
Połączyłem kilka opcji, aby obsługiwać FireFox, IE i Chrome. Zaktualizowałem go również, aby lepiej obsługiwał mac
// simply disables save event for chrome
$(window).keypress(function (event) {
if (!(event.which == 115 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) && !(event.which == 19)) return true;
event.preventDefault();
return false;
});
// used to process the cmd+s and ctrl+s events
$(document).keydown(function (event) {
if (event.which == 83 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) {
event.preventDefault();
save(event);
return false;
}
});
Naprawdę chciałbym, aby aplikacje internetowe nie zastępowały moich domyślnych klawiszy skrótu. Ctrl+ Sjuż coś robi w przeglądarkach. Nagła zmiana w zależności od witryny, którą przeglądam, jest uciążliwa i frustrująca, nie wspominając o często błędach. Miałem przechwytywanie witryn Ctrl+, Tabponieważ wyglądało to tak samo jak Ctrl+ I, co zrujnowało moją pracę na stronie i uniemożliwiło mi normalne przełączanie kart.
Jeśli chcesz klawisze skrótów, użyj accesskeyatrybutu. Nie przerywaj istniejącej funkcjonalności przeglądarki.
@Eevee: Ponieważ przeglądarka staje się domem dla bogatszych i bogatszych funkcji i zaczyna zastępować aplikacje komputerowe, po prostu nie będzie można zrezygnować ze skrótów klawiaturowych. Bogaty i intuicyjny zestaw poleceń klawiaturowych Gmaila odegrał kluczową rolę w mojej chęci porzucenia Outlooka. Skróty klawiaturowe w Todoist, Czytniku Google i Kalendarzu Google ułatwiają mi codzienne życie.
Deweloperzy zdecydowanie powinni uważać, aby nie zastąpić naciśnięć klawiszy, które już mają znaczenie w przeglądarce. Na przykład pole tekstowe WMD, w którym piszę, w niewytłumaczalny sposób interpretuje Ctrl+ Deljako „cytat blokowy”, a nie „usuń słowo do przodu”. Ciekaw jestem, czy istnieje gdzieś standardowa lista „bezpiecznych dla przeglądarki” skrótów, z których mogą korzystać twórcy witryn i od których przeglądarki będą się trzymać z daleka w przyszłych wersjach.
$(document).keydown(function(e) {
if ((e.key == 's' || e.key == 'S' ) && (e.ctrlKey || e.metaKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try pressing ctrl+s somewhere.
To jest wersja up-to-date z @ odpowiedź AlanBellows męska, zastępując whichz key. Działa również z usterką klawisza wielkiego Chrome (gdzie po naciśnięciu Ctrl+ Swysyła duże S zamiast s). Działa we wszystkich nowoczesnych przeglądarkach.
To było moje rozwiązanie, które jest znacznie łatwiejsze do odczytania niż inne sugestie tutaj, może z łatwością zawierać inne kombinacje klawiszy i zostało przetestowane w IE, Chrome i 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;
});
String.fromCharCode. Chociaż komputery Mac nie mają klawisza sterującego. Sprawdź klawisz polecenia za pomocą evt.metaKey. Wraca truedo Cmd na Macu i Win w Windows.
Podoba mi się ta mała wtyczka . Wymaga jednak nieco większej zgodności z różnymi przeglądarkami.
To powinno działać (dostosowane z 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;
}
});
przykład:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
stosowanie
<script type="text/javascript" src="js/shortcut.js"></script>
link do pobrania: http://www.openjs.com/scripts/events/keyboard_shortcuts/#
Do Alana Bellowsa odpowiedź:! (E.altKey) dodany dla użytkowników, którzy używają AltGrpodczas pisania (np. Polska). Bez tego naciśnięcie AltGr+ Sda taki sam wynik jak 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; });
Ta wtyczka stworzona przeze mnie może być pomocna.
Możesz użyć tej wtyczki, aby podać kluczowe kody i funkcje, aby uruchomić w ten sposób
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
W kodzie pokazałem jak wykonać dla Ctrl+ S. Otrzymasz szczegółową dokumentację pod linkiem. Wtyczka znajduje się w sekcji kodu JavaScript Mojego pióra na Codepen.
Rozwiązałem swój problem w IE , używając znaku, alert("With a message")aby zapobiec domyślnemu zachowaniu:
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;
}
}
});