Domanda

Ho letto jQuery evento Pressione: quale tasto è stato premuto e Come posso controllare se il tasto viene premuto durante l'evento click con jQuery?

Comunque la mia domanda è se è possibile ottenere lo stesso evento chiave per tutti i browser? Attualmente So che Firefox dà il comando tasto (Mac) il codice 224, mentre Chrome e Safari conferiscono il valore 91. è l'approccio migliore per controllare semplicemente il browser che l'utente sta usando e la base del tasto premuto su che o c'è un senso in modo che io possa avere 1 codice chiave in tutti i browser? Nota Mi è toccato il valore con il:

var code = (evt.keyCode ? evt.keyCode : evt.which);

mi piacerebbe non utilizzare un plugin, se possibile, solo perché ho solo bisogno di conoscere il comando / Ctrl (sistema Windows) tasto premuto.

È stato utile?

Soluzione

jQuery gestisce già questo. Per verificare se il controllo è stato premuto si dovrebbe usare:

$(window).keydown(function (e){
    if (e.ctrlKey) alert("control");
});

L'elenco dei tasti modificatori:

e.ctrlKey
e.altKey
e.shiftKey

E come fudgey suggerito:

e.metaKey

potrebbe funzionare su Mac. Alcuni altri modi anche qui .

Altri suggerimenti

Se non siete interessati nel momento esatto si preme il tasto Comando, solo se viene premuto quando si preme un altro tasto, quindi è possibile utilizzare la proprietà metaKey della manifestazione.

In caso contrario, per gli eventi keydown e keyup, la proprietà che vi serve è keyCode in tutti i browser. Purtroppo, il Comando chiave non ha lo stesso codice chiave in tutti i browser, e la sinistra e la destra Comando s hanno valori diversi in WebKit (rispettivamente 91 e 93). Non riesco a vedere un modo semplice di rilevare questi tasti senza un qualche tipo di browser che annusare, ma ci può essere uno. La proprietà which sicuramente non vi aiuterà.

Per ulteriori informazioni, http://unixpapa.com/js/key.html ha una copertura completa di evento chiave la gestione in tutti i principali browser.

Qui si va, provate questo vivere in questo frammento di codice eseguibile:

$(window).on('keypress', function(event) {
  $("body").append($("<p>").text(
       "ctrlKey " + event.ctrlKey
    + "; altKey " + event.altKey
    + "; metaKey " + event.metaKey
    + "; shiftKey " + event.shiftKey
    + "; isCommandPressed " + isCommandPressed(event)
  ));
  
});

function isCommandPressed(event) {
  return event.metaKey && ! event.ctrlKey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>Focus on this select control and try pressing keys:</p>

<p><select><option>Test</option></select></p>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top