429 votes

Détecter la touche Entrée dans un champ de saisie de texte

J'essaie de faire une fonction si l'entrée est pressée pendant une entrée spécifique.

Qu'est-ce que je fais de mal ?

$(document).keyup(function (e) {
    if ($(".input1").is(":focus") && (e.keyCode == 13)) {
        // Do something
    }
});

Existe-t-il une meilleure façon de procéder qui dirait que, si l'on appuie sur la touche "entrée" sur .input1 fonctionnent ?

2 votes

0 votes

Toutes les solutions sont valables, mais gardez à l'esprit que vous devez utiliser e.key ou e.code, car e.which et e.keyCode sont tous deux dépréciés. Vous pouvez trouver les bonnes valeurs pour les clés que vous voulez détecter ici : keyjs.dev

684voto

Joseph Silber Points 69582
$(".input1").on('keyup', function (e) {
    if (e.key === 'Enter' || e.keyCode === 13) {
        // Do something
    }
});

// e.key is the modern way of detecting keys
// e.keyCode is deprecated (left here for for legacy browsers support)
// keyup is not compatible with Jquery select(), Keydown is.

0 votes

Dans quel navigateur l'avez-vous testé ? Je pense que les anciennes versions d'IE ne déclenchent pas les événements keyup sur le document (je n'en suis pas sûr).

0 votes

N'est-ce pas ? 65 ils keyCode pour a ? jsFiddle .

2 votes

Votre code ne fonctionnait pas parce que vous utilisiez .is() et aviez besoin de === plutôt que de ==. Voir ma réponse pour plus de détails.

240voto

Gibolt Points 4072

Event.key === "Enter"

Plus récent et beaucoup plus propre : utiliser event.key . Plus de codes numériques arbitraires !

REMARQUE : Les anciennes propriétés ( .keyCode y .which ) sont dépréciés.

const node = document.getElementsByClassName("input1")[0];
node.addEventListener("keyup", function(event) {
    if (event.key === "Enter") {
        // Do work
    }
});

Style moderne, avec lambda et déstructuration

node.addEventListener("keyup", ({key}) => {
    if (key === "Enter") {
        // Do work
    }
})

Si vous devez utiliser jQuery :

$(document).keyup(function(event) {
    if ($(".input1").is(":focus") && event.key == "Enter") {
        // Do work
    }
});

Docs Mozilla

Navigateurs pris en charge

44voto

Wes Points 7117
$(document).keyup(function (e) {
    if ($(".input1:focus") && (e.keyCode === 13)) {
       alert('ya!')
    }
 });

Ou simplement lier à l'entrée elle-même

$('.input1').keyup(function (e) {
    if (e.keyCode === 13) {
       alert('ya!')
    }
  });

Pour savoir de quel code clé vous avez besoin, utilisez le site web http://keycode.info

0 votes

Merci. J'ai appris quelque chose de nouveau. Au fait, j'ai utilisé .is() un grand nombre de fois, donc ce n'est pas logique et cela ne fonctionne pas. J'ai également utilisé deux == pour d'autres situations.

0 votes

Np, vous devriez toujours utiliser ===

14voto

ShankarSangoli Points 45345

Essayez ceci pour détecter le Enter pressée dans une zone de texte.

$(function(){

$(".input1").keyup(function (e) {
    if (e.which == 13) {
        // Enter key pressed
    }
 });

});

9voto

Roy Shoa Points 166

Le meilleur moyen que j'ai trouvé est d'utiliser keydown ( le keyup ne fonctionne pas bien pour moi).

Note : J'ai également désactivé l'envoi du formulaire parce qu'en général, lorsque vous aimez faire certaines actions en appuyant sur la touche Entrée, la seule chose que vous n'aimez pas est d'envoyer le formulaire :)

$('input').keydown( function( event ) {
    if ( event.which === 13 ) {
        // Do something
        // Disable sending the related form
        event.preventDefault();
        return false;
    }
});

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