145 votes

angular2 soumettre un formulaire en appuyant sur la touche entrée sans bouton de soumission

Est-il possible de soumettre un formulaire qui n'a pas de bouton "submit" (en appuyant sur "enter") ? exemple :

<form [ngFormModel]="xxx" (ngSubmit)="xxxx()">
  <input [(ngModel)]="lxxR"   ngControl="xxxxx"/>
</form

276voto

sizzle Points 1378

Vous pouvez également ajouter (keyup.enter)="xxxx()"

0 votes

Cela fonctionne très bien si vous avez simplement une vieille fonction que vous souhaitez appeler au lieu d'un gestionnaire d'envoi.

4 votes

Cette approche a été mentionnée dans la documentation d'Angular. angular.io/docs/ts/latest/guide/

0 votes

C'est la seule façon dont cela fonctionne dans ma situation, merci !

103voto

Khaled Al-Ansari Points 2475

Peut-être que vous ajoutez keypress o keydown aux champs de saisie et attribuez l'événement à la fonction qui effectuera l'envoi lorsque l'on clique sur Entrée.

Votre modèle devrait ressembler à ceci

    <form (keydown)="keyDownFunction($event)">
      <input type="text" />
    </form

Et votre fonction dans votre classe ressemblerait à ceci

    keyDownFunction(event) {
      if (event.keyCode === 13) {
        alert('you just pressed the enter key');
        // rest of your code
      }
    }

98voto

Abdulrahman Points 12886

Editar:

  <form (submit)="submit()" >
    <input />
    <button type="submit" style="display:none">hidden submit</button>
  </form>

Pour utiliser cette méthode, vous devez disposer d'un bouton d'envoi, même s'il n'est pas affiché "Thanks for Réponse de la boîte à outils "

Vieille réponse :

Oui, exactement comme vous l'avez écrit, sauf que le nom de l'événement est (submit) au lieu de (ngSubmit) :

~~<form [ngFormModel]="xxx" (submit)="xxxx()"> <input [(ngModel)]="lxxR" ngControl="xxxxx"/> </form>~~

2 votes

Pouvez-vous s'il vous plaît fournir un plunker ? parce qu'il ne fonctionne pas

0 votes

Utilisez "visibility : hidden ;" à la place. Le "display:none ;" fonctionne dans chrome, mais pas dans safari.

0 votes

Cette méthode devrait être utilisée, à ceci près que le bouton d'envoi ne devrait pas être caché mais visible, car certaines personnes chercheront ce bouton et ne prendront pas la peine d'appuyer sur la touche Entrée.

43voto

MA-Maddin Points 3242

Je préfère (keydown.enter)="mySubmit()" parce qu'il n'y aura pas de saut de ligne ajouté si le curseur se trouvait quelque part à l'intérieur d'un <textarea> mais pas à sa fin.

1 votes

Cela devrait être la solution acceptée - beaucoup plus propre

41voto

Cette méthode est beaucoup plus simple...

<form [formGroup]="form" (keyup.enter)="yourMethod(form.value)">

</form>

2 votes

Merci, c'est plus facile que je ne le pensais. Résolu comme ceci : <input type="text" class="form-control" [(ngModel)]="object.LanguageTableData" (blur)="mymethod()" (keyup.enter)="mymethod()" />

2 votes

Beaucoup plus facile de cette façon plutôt que d'envoyer une fonction avec $event. Merci !

1 votes

Beaucoup mieux. pas de boutons cachés ou de js. Pure façon angulaire

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