1374 votes

Déclencher un clic de bouton avec JavaScript sur la touche Entrée dans une zone de texte

J'ai une entrée de texte et un bouton (voir ci-dessous). Comment puis-je utiliser JavaScript pour déclencher l'événement de clic du bouton lorsque le Enter est pressée dans la zone de texte ?

Il existe déjà un autre bouton d'envoi sur ma page actuelle, je ne peux donc pas simplement faire de ce bouton un bouton d'envoi. De plus, je uniquement veulent le Enter pour cliquer sur ce bouton spécifique s'il est pressé à partir de cette zone de texte, rien d'autre.

<input type="text" id="txtSearch" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />

Mise à jour : Accepter sa propre réponse est maintenant autorisé, mais la solution jQuery est probablement meilleure. Si vous n'avez pas accès à jQuery pour une raison quelconque, voyez ma propre réponse ci-dessous.

2 votes

Remarque importante pour les débutants comme moi : L'élément clé de cette question est de savoir si vous avez déjà un formulaire sur la page et donc déjà un bouton d'envoi. La réponse de jQuery est compatible avec tous les navigateurs et constitue une bonne solution.

4 votes

@JoshuaDance, avoir déjà un formulaire/soumission n'est pas un problème. Une page peut avoir plusieurs formulaires (mais pas imbriqués), chacun ayant son propre submit. Chaque champ de chaque formulaire ne déclenchera que le submit de ce formulaire. Comme indiqué par cette réponse .

1489voto

Steve Paulo Points 8263

En jQuery, cela fonctionnerait :

$("#id_of_textbox").keyup(function(event){
    if(event.keyCode == 13){
        $("#id_of_button").click();
    }
});

Désolé, je ne sais pas comment le faire en JavaScript, mais peut-être que quelqu'un d'autre pourrait extrapoler cela ?

P.S. : utilisez jQuery ;)

13 votes

Il est probablement préférable d'interroger event.which plutôt que event.keyCode ou event.charCode, cf. developer.mozilla.org/fr/DOM/event.charCode#Notes

0 votes

@William : Comme il l'utilise keyup et votre lien dit " charCode n'est jamais défini dans le keydown y keyup événements. Dans ces cas, keyCode est mis à la place." cela n'a pas d'importance. Ceci étant dit, je ne pense pas que keyup est le bon événement pour ce travail ( keydown C'est ce que j'aurais pensé ; c'est ainsi qu'un bouton se comporte lorsqu'il a le focus, par exemple).

27 votes

keydown pas keyup est le meilleur événement à utiliser. De plus, si vous utilisez asp.net, vous devrez return false à la fin pour empêcher asp.net de continuer à intercepter l'événement.

422voto

Sergey Ilinsky Points 16803

Il suffit ensuite de le coder !

<input type="text" id="txtSearch" onkeydown="if (event.keyCode == 13) document.getElementById('btnSearch').click()"/>
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />

6 votes

Oui, j'ai presque fait ça. Je suppose que c'est juste une question de préférence personnelle... J'aime l'approche plus modulaire ;)

10 votes

Si vous avez besoin d'arrêter la soumission du formulaire:onkeydown="if (event.keyCode == 13) {document.getElementById('btnSubmit').click();event.returnValue=false;event.cancel=true;}"

1 votes

Qu'en est-il de la compatibilité entre navigateurs ? Fonctionne-t-il dans tous les navigateurs courants ? (Je considère IE6 comme un navigateur courant, car il représente encore plus de 5 % des navigateurs utilisés dans le monde).

182voto

kdenney Points 3486

J'ai trouvé ça :

    <input type="text" id="txtSearch" onkeypress="searchKeyPress(event);" />
    <input type="button" id="btnSearch" Value="Search" onclick="doSomething();" />

    <script>
    function searchKeyPress(e)
    {
        // look for window.event in case event isn't passed in
        if (typeof e == 'undefined' && window.event) { e = window.event; }
        if (e.keyCode == 13)
        {
            document.getElementById('btnSearch').click();
        }
    }
    </script>

23 votes

E = e || window.event ; // moyen le plus court pour obtenir l'événement

3 votes

Meilleure option JavaScript simple. L'ajout de JavaScript en tant qu'attribut dans le HTML prend beaucoup de place, et jQuery n'est que jQuery (la compatibilité n'est pas garantie). Merci pour cette solution !

0 votes

Et si vous renvoyez false à l'intérieur du if, vous pouvez éviter que la clé ne soit traitée plus avant : <input type="text" id="txtSearch" onkeypress="searchKeyPress(event) ;" /> <input type="button" id="btnSearch" Value="Search" onclick="doSomething() ;" /> <script> function searchKeyPress(e) { // look for window. event au cas où l'événement n'est pas transmis e = e || window.event ; if (e.keyCode == 13) { document.getElementById('btnSearch').click() ; return false ; } return true ; }. </script>

85voto

albertein Points 10821

Faites en sorte que le bouton soit un élément d'envoi, pour que ce soit automatique.

<input type="submit" id="btnSearch" value="Search" onclick="return doSomething();" />

Notez que vous aurez besoin d'un <form> contenant les champs de saisie pour que cela fonctionne (merci Sergey Ilinsky).

Ce n'est pas une bonne pratique que de redéfinir un comportement standard, les Enter doit toujours appeler le bouton "submit" d'un formulaire.

31 votes

Les gars ! Lisez sa question en entier. Il y a déjà un autre bouton d'envoi sur la page, donc cela ne fonctionnerait pas pour lui.

7 votes

Pour l'anecdote, j'ai récemment essayé de faire cela dans SharePoint. Cependant, SharePoint dispose déjà d'un formulaire qui entoure tout votre contenu, et tout ce que vous avez à faire est de le faire. <form> sont rejetées par l'analyseur HTML, par ailleurs très libéral. Je dois donc détourner les touches du clavier. (D'ailleurs, pour une raison quelconque, appuyer sur la touche Entrée dans SharePoint lance le mode édition. Je suppose que le ruban utilise le même formulaire).

2 votes

A <button type="submit" onclick="return doSomething(this)">Value</button> travaille pour. L'indice se trouve dans le return mot-clé

60voto

Varun Points 1535

En simple JavaScript,

if (document.layers) {
  document.captureEvents(Event.KEYDOWN);
}

document.onkeydown = function (evt) {
  var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : event.keyCode;
  if (keyCode == 13) {
    // For Enter.
    // Your function here.
  }
  if (keyCode == 27) {
    // For Escape.
    // Your function here.
  } else {
    return true;
  }
};

J'ai remarqué que la réponse n'est donnée qu'en jQuery, j'ai donc pensé à donner quelque chose en simple JavaScript également.

22 votes

Document.layers ? Vous soutenez toujours Netscape ? !!

7 votes

Non, vous n'avez pas besoin de supporter Netscape. blog.netscape.com/2007/12/28/

9 votes

Netscape.com n'existe même plus (il redirige vers aol.com) et pourtant il y a toujours des gens qui supportent nescape, incroyable.

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