807 votes

Comment détecter l'appui sur la touche Entrée du clavier à l'aide de jQuery ?

Je voudrais détecter si l'utilisateur a appuyé sur Enter en utilisant jQuery.

Comment cela est-il possible ? Faut-il un plugin ?

EDIT : Il semble que je doive utiliser la fonction keypress() méthode.

Je voulais savoir si quelqu'un sait s'il y a des problèmes de navigateur avec cette commande - comme des problèmes de compatibilité de navigateur que je devrais connaître ?

0 votes

6 votes

L'une des meilleures choses dans les frameworks Javascript est qu'ils doivent être par défaut compatibles avec les navigateurs. Ils gèrent les contrôles de compatibilité des navigateurs afin que l'utilisateur n'ait pas à le faire. Je n'ai pas lu le code source de JQuery, mais je doute que la fonction keypress soit différente dans ce sens.

3 votes

Le seul problème de compatibilité avec les navigateurs est que vous devez utiliser e.which au lieu de e.keyCode pour détecter le code ascii.

1461voto

Paolo Bergantino Points 199336

L'intérêt de jQuery est que vous n'avez pas à vous soucier des différences entre les navigateurs. Je suis presque sûr que vous pouvez utiliser en toute sécurité enter étant 13 dans tous les navigateurs. Donc avec ça en tête, vous pouvez faire ça :

$(document).on('keypress',function(e) {
    if(e.which == 13) {
        alert('You pressed enter!');
    }
});

9 votes

Je fais un lien vers ceci parce que j'ai lu ceci et je me suis demandé pourquoi keypress ne fonctionnait pas avec IE (il ne se lie pas à $(window) sous IE) quirksmode.org/dom/events/keyes.html

17 votes

E.keyCode n'est pas 100% compatible avec les navigateurs. Utilisez e.which à la place comme indiqué ci-dessous

15 votes

Extrait de la documentation de jQuery "La propriété event.which normalise event.keyCode et event.charCode. Il est recommandé de surveiller event.which pour la saisie des touches du clavier."

137voto

Andrea Points 681

J'ai écrit un petit plugin pour faciliter la liaison de l'événement "on enter key pressed" :

$.fn.enterKey = function (fnc) {
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if (keycode == '13') {
                fnc.call(this, ev);
            }
        })
    })
}

Utilisation :

$("#input").enterKey(function () {
    alert('Enter!');
})

0 votes

Cela ne fonctionne pas pour moi (j'ai obtenu #input sur le <input> champ)

1 votes

Qu'en est-il si l'élément #input est dynamique ?

0 votes

@mplungjan Je ne suis pas sûr de ce que vous entendez par "déléguer".

70voto

Ian Roke Points 1051

Je n'ai pas réussi à faire fonctionner le code posté par @Paolo Bergantino, mais lorsque je l'ai modifié en $(document) y e.which au lieu de e.keyCode puis j'ai constaté qu'il fonctionnait parfaitement.

$(document).keypress(function(e) {
    if(e.which == 13) {
        alert('You pressed enter!');
    }
});

Lien vers l'exemple sur JS Bin

0 votes

Pour moi, e.which ne fonctionne pas avec IE. Est-ce que cela fonctionne pour les autres ?

0 votes

Quelle version d'IE ? Cela fonctionne bien pour moi avec IE7.

0 votes

Extrait de la documentation de jQuery "La propriété event.which normalise event.keyCode et event.charCode. Il est recommandé de surveiller event.which pour la saisie des touches du clavier."

56voto

jesal Points 2441

J'ai trouvé que cela était plus compatible avec les différents navigateurs :

$(document).keypress(function(event) {
    var keycode = event.keyCode || event.which;
    if(keycode == '13') {
        alert('You pressed a "enter" key in somewhere');    
    }
});

1 votes

Votre IF ternaire peut être raccourci en : var keycode = event.keyCode || event.which ;

1 votes

Pour les boutons dans les formulaires, je mets cette ligne avant l'alerte (ou l'action) : event.preventDefault() ; Cela empêche la soumission du formulaire.

7voto

Richard Simões Points 4981

Il y a un appuyez sur la touche() la méthode de l'événement. Le numéro ascii de la touche Entrée est 13 et ne dépend pas du navigateur utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X