Risposte:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
I codici chiave possono differire tra i browser, quindi potrebbe essere necessario controllare oltre 115.
keydown
invece di keypress
in chrome
Questo funziona per me (usando jquery) per sovraccaricare Ctrl+ S, Ctrl+ Fe 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 if
non funzionerà perché l' if
istruzione originale sarà già valutata come vera. Dovrai inserire il codice prima if
dell'istruzione originale , trasformando l'originale in un else if
.
È possibile utilizzare una libreria di collegamenti per gestire elementi specifici del browser.
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
Questa soluzione jQuery funziona per me in Chrome e Firefox, sia per Ctrl+ Sche per 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.key
invece di e.which
;
Questo ha funzionato per me su Chrome ... per qualche motivo event.which
restituisce una S maiuscola (83) per me, non so perché (indipendentemente dallo stato di blocco maiuscole), quindi ho usato fromCharCode
e toLowerCase
solo per essere al sicuro
$(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;
});
Se qualcuno sa perché ottengo 83 e non 115 , sarò felice di sentire, anche se qualcuno lo prova su altri browser, sarò felice di sapere se funziona o no
Ho combinato alcune opzioni per supportare FireFox, IE e Chrome. L'ho anche aggiornato per supportare meglio 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;
}
});
Vorrei che le applicazioni Web non sovrascrivessero i miei tasti di scelta rapida predefiniti, onestamente. Ctrl+ Sfa già qualcosa nei browser. Avere quel cambiamento bruscamente a seconda del sito che sto visualizzando è dirompente e frustrante, per non parlare spesso di bug. Ho avuto siti che dirottano Ctrl+ Tabperché sembrava uguale a Ctrl+I , entrambi rovinando il mio lavoro sul sito e impedendomi di cambiare scheda come al solito.
Se si desidera utilizzare i tasti di scelta rapida, utilizzare l' accesskey
attributo. Si prega di non interrompere la funzionalità del browser esistente.
@Eevee: poiché il browser diventa la casa per funzionalità sempre più ricche e inizia a sostituire le app desktop, non sarà un'opzione per rinunciare all'uso delle scorciatoie da tastiera. Il ricco e intuitivo set di comandi da tastiera di Gmail è stato determinante per la mia volontà di abbandonare Outlook. Le scorciatoie da tastiera di Todoist, Google Reader e Google Calendar rendono la mia vita molto, molto più semplice su base giornaliera.
Gli sviluppatori dovrebbero assolutamente fare attenzione a non sovrascrivere i tasti che hanno già un significato nel browser. Ad esempio, la casella di testo WMD che sto scrivendo interpreta inspiegabilmente Ctrl+ Delcome "Blockquote" anziché "elimina parola in avanti". Sono curioso di sapere se esiste un elenco standard da qualche parte di scorciatoie "sicure per i browser" che gli sviluppatori del sito possono usare e che i browser si impegneranno a evitare nelle versioni future.
$(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.
Questa è una versione aggiornata della risposta di @ AlanBellows, che sostituisce which
con key
. Funziona anche con il glitch della chiave maiuscola di Chrome (dove se si preme Ctrl+ Sinvia S maiuscole anziché s). Funziona con tutti i browser moderni.
Questa era la mia soluzione, che è molto più facile da leggere rispetto ad altri suggerimenti qui, può facilmente includere altre combinazioni di tasti ed è stata testata su IE, Chrome e 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
. Tuttavia, i Mac non hanno un tasto di controllo. Test per il tasto comando con evt.metaKey
. Ritorna true
per Cmd su Mac e Win su Windows.
Mi piace questo piccolo plugin . Tuttavia ha bisogno di un po 'più di compatibilità con i browser.
Dovrebbe funzionare (adattato da 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;
}
});
esempio:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
uso
<script type="text/javascript" src="js/shortcut.js"></script>
link per il download: http://www.openjs.com/scripts/events/keyboard_shortcuts/#
Alla risposta di Alan Bellows:! (E.altKey) aggiunto per gli utenti che usano AltGrdurante la digitazione (ad es. Polonia). Senza questa pressaturaAltGr + si Sotterrà lo stesso risultato di 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; });
Questo plugin creato da me può essere utile.
Puoi usare questo plugin devi fornire i codici chiave e la funzione per essere eseguito in questo modo
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
Nel codice ho mostrato come eseguire per Ctrl+ S. Otterrai la documentazione dettagliata sul link. Il plug-in è nella sezione Codice JavaScript della mia penna su Codepen.
Ho risolto il mio problema su IE , utilizzando un alert("With a message")
per impedire il comportamento predefinito:
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;
}
}
});