J'ai deux fonctions. Lorsque enter est enfoncé, les fonctions s'exécutent correctement, mais lorsque escape est enfoncé, il ne fonctionne pas. Quel est le bon numéro pour la touche d'échappement?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
javascript
jquery
Shishant
la source
la source
document.addEventListener("keydown", e => console.log(e.keyCode))
dans la console de votre navigateur, cliquez dans la fenêtre et appuyez sur la touche que vous recherchez.Réponses:
Essayez avec l' événement keyup :
la source
keydown
imitera le comportement natif - au moins sous Windows où appuyer sur ESC ou Retour dans une boîte de dialogue déclenchera l'action avant que la touche ne soit relâchée.Plutôt que de coder en dur les valeurs de code dans votre fonction, pensez à utiliser des constantes nommées pour mieux transmettre votre sens:
Certains navigateurs (comme FireFox, peu sûrs des autres) définissent un
KeyEvent
objet global qui expose ces types de constantes pour vous. Cette question SO montre également une belle façon de définir cet objet dans d'autres navigateurs.la source
0x1B
et Enter est0x0D
, non?(Réponse extraite de mon commentaire précédent )
Vous devez utiliser
keyup
plutôt quekeypress
. par exemple:keypress
ne semble pas être géré de manière cohérente entre les navigateurs (essayez la démo sur http://api.jquery.com/keypress dans IE vs Chrome vs Firefox. Parfois,keypress
ne s'enregistre pas, et les valeurs pour "which" et " keyCode 'varient) alors qu'ilkeyup
est cohérent.Puisqu'il y a eu une discussion sur
e.which
vse.keyCode
: Notez quee.which
c'est la valeur normalisée jquery et celle recommandée pour l'utilisation:(depuis http://api.jquery.com/event.which/ )
la source
keypress
en cas de fuite le font correctement.keypress
est destiné à ne se déclencher que lorsque la clé produit un personnage alors qu'il sekeyup
déclenche toujours. developer.mozilla.org/en-US/docs/Web/Events/keypressPour trouver le code clé pour n'importe quelle clé, utilisez cette fonction simple:
la source
27
est le code de la touche d'échappement. :)la source
Votre meilleur pari est
Sommaire
which
est plus préférable quekeyCode
parce qu'elle est normaliséekeyup
est plus préférable quekeydown
parce que la frappe peut se produire plusieurs fois si l'utilisateur la maintient enfoncée.keypress
que si vous souhaitez capturer des personnages réels.Fait intéressant, Bootstrap utilise keydown et keyCode dans son composant déroulant (à partir de 3.0.2)! Je pense que c'est probablement un mauvais choix là-bas.
Extrait associé du document JQuery
Autre élément d'intérêt: JavaScript Keypress Library
la source
Essayez le plugin jEscape ( téléchargement depuis Google Drive )
ou obtenez le code clé pour le navigateur croisé
vous pouvez peut-être utiliser le commutateur
la source
Votre code fonctionne très bien. C'est probablement la fenêtre qui n'est pas focalisée. J'utilise une fonction similaire pour fermer les boîtes iframe, etc.
la source
J'essayais de faire la même chose et ça me dérangeait. Dans Firefox, il semble que si vous essayez de faire certaines choses lorsque la touche d'échappement est enfoncée, il continue de traiter la touche d'échappement qui annule ensuite tout ce que vous essayez de faire. L'alerte fonctionne bien. Mais dans mon cas, je voulais revenir dans l'histoire qui n'a pas fonctionné. Enfin compris que je devais forcer la propagation de l'événement à s'arrêter comme indiqué ci-dessous ...
la source
Pour expliquer où les autres réponses n'ont pas; le problème est votre utilisation de
keypress
.Peut-être que l'événement est simplement mal nommé mais
keypress
est défini pour se déclencher quand . C'est-à-dire du texte. Alors que ce que vous voulez est / , qui se déclenche à chaque fois (respectivement avant ou après) . C'est à dire ces choses sur le clavier.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
La différence apparaît ici car il
esc
s'agit d'un caractère de contrôle (littéralement «caractère non imprimable») et n'écrit donc aucun texte, donc même pas de tirkeypress
.enter
est bizarre, car même si vous l'utilisez comme caractère de contrôle (c'est-à-dire pour contrôler l'interface utilisateur), il insère toujours un caractère de nouvelle ligne, qui se déclencherakeypress
.Source: quirksmode
la source
Pour obtenir le code hexadécimal pour tous les caractères: http://asciitable.com/
la source
Il suffit de poster une réponse mise à jour qui
e.keyCode
est considérée comme obsolète sur MDN .Vous devriez plutôt opter pour
e.key
plutôt qui prend en charge les noms propres pour tout. Voici les pâtes de copie pertinentesla source
Esc
plutôt que la normeEscape
.Une bibliothèque Javascript robuste pour capturer les saisies au clavier et les combinaisons de touches saisies. Il n'a pas de dépendances.
http://jaywcjlove.github.io/hotkeys/
raccourcis clavier comprend les modificateurs suivants: ⇧, shiftoption⌥altctrlcontrolcommand, et ⌘.
Les touches spéciales suivantes peuvent être utilisées pour les raccourcis: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deleteet à f1travers f19.
la source
J'ai toujours utilisé keyup et e.which pour attraper la touche d'échappement.
la source
Je sais que cette question se pose sur jquery, mais pour les personnes utilisant jqueryui, il existe des constantes pour de nombreux codes clés:
http://api.jqueryui.com/jQuery.ui.keyCode/
la source