2010-12-11 19 views
44

Lorsque vous remplissez la zone de texte d'un formulaire, le comportement par défaut lorsque la touche Entrée est atteinte est de passer à la ligne suivante. Comment puis-je modifier le comportement du formulaire afin qu'il soit soumis lors de la frappe de l'utilisateur même lorsque l'utilisateur est dans une zone de texte?Comment soumettre un formulaire sur enter lorsque la zone de texte est active?

J'ai utilisé Firebug pour extraire le commentaire   de Stack textarea (qui a ce comportement), mais ne voyait aucun JavaScript ayant atteint cet effet. Existe-t-il un moyen de modifier le comportement de la zone de texte sans utiliser JavaScript? Pourquoi voulez-vous qu'une zone de texte soit soumise lorsque vous appuyez sur Entrée?

+3

si on renomme cette question à "soumettre le formulaire sur ENTER quand textarea"? –

Répondre

95

Vous ne pouvez pas faire cela sans JavaScript. Stackoverflow utilise la bibliothèque JavaScript jQuery qui attache des fonctions aux éléments HTML lors du chargement de la page.

Voilà comment vous pouvez le faire avec JavaScript de base:

<textarea onkeydown="if (event.keyCode == 13) { this.form.submit(); return false; }"></textarea> 

Keycode 13 est la touche Entrée.

Voilà comment vous pouvez le faire avec jQuery comme comme Stackoverflow fait:

<textarea class="commentarea"></textarea> 

avec

$(document).ready(function() { 
    $('.commentarea').keydown(function(event) { 
     if (event.keyCode == 13) { 
      this.form.submit(); 
      return false; 
     } 
    }); 
}); 
+11

Puisque les utilisateurs sont plus familiers avec les actions quand ils relâchent la clé, est une meilleure pratique pour utiliser onkeyup ou keyup() au lieu de keydown(). –

+0

Belle explication. @Eric Fortis - bon point sur l'onkeyup. – andrew

+0

Je vais écrire une fonction et la mettre dans mon fichier de fonctions de formulaire pour essayer de garder le code propre. – andrew

4
<form id="myform"> 
    <input type="textbox" id="field"/> 
    <input type="button" value="submit"> 
</form> 

<script> 
    $(function() { 
     $("#field").keyup(function (event) { 
      if (event.which === 13) { 
       document.myform.submit(); 
      } 
     } 
    }); 
</script> 
+0

Notez que la partie pertinente du code HTML est l'ID, j'ai utilisé une zone de texte, mais il peut s'agir de n'importe quelle étiquette que vous souhaitez attacher le comportement. Aussi pour la lisibilité je préfère invoquer le formulaire par son ID comme indiqué, c'est très pratique surtout si vous avez plusieurs formes dans votre code. –

+0

bien, je ne prévois pas d'apprendre jquery pour le moment cependant. Je préfère écrire la fonction moi-même car alors j'ai la chance de pratiquer l'écriture javascript – andrew

5

Une entrée "texte" sera envoyée par défaut lorsque vous appuyez sur entrée. C'est une entrée de ligne unique.

<input type="text" value="..."> 

Un "textarea" ne le sera pas, car il bénéficie de capacités multilignes. Soumettre sur entrer enlève une partie de cet avantage.

<textarea name="area"></textarea> 

Vous pouvez ajouter du code JavaScript pour détecter l'entrer et keypress soumission automatique, mais vous pouvez être mieux d'utiliser une entrée de texte.

+1

Parce que je veux une boîte de saisie multiligne et je veux que l'utilisateur puisse soumettre en appuyant sur Entrée. Je vais complètement supprimer le bouton de soumission. Je pense que SO devrait se débarrasser de leur bouton Ajouter un commentaire s'ils vont permettre la soumission du commentaire lorsque la touche Entrée est pressée – andrew