97 votes

Angular 2 empêche l'entrée de soumettre dans un formulaire piloté par un modèle

J'ai des formulaires qui utilisent le plan directeur basé sur des modèles, donc quelque chose comme ceci :

<form #myForm="ngForm" ngSubmit="save(myForm.value, myForm.isValid)">
  <input #name="ngModel" [(ngModel)]="name">
  <button type="submit">Submit form</button>
</form>

Maintenant, comment puis-je empêcher ENTER de soumettre le formulaire ? Cela interfère avec le comportement personnalisé d'ENTRÉE à l'intérieur du formulaire et aussi si vous appuyez accidentellement sur ENTRÉE dans une entrée, ce qui est indésirable.

J'ai cherché et trouvé d'anciennes réponses sur Angular 1 et d'autres sur JavaScript, mais je pense qu'Angular 2 doit avoir quelque chose de ce genre déjà intégré, mais je n'ai pas pu le trouver.

Si ce n'est pas le cas, quelle serait la meilleure façon d'y parvenir ?

4voto

Syjmick Points 31

C'est ce qui m'a aidé :

  • le bouton qui doit agir comme celui qui soumet devrait être type="button"
  • ce bouton devrait avoir (click)="onSubmit()" <- la méthode qui sera appelée
  • et vous pouvez supprimer par exemple (ngSubmit)="onSubmit()" de <form [formGroup]="form" (ngSubmit)="onSubmit()">

Je ne suis pas sûr qu'il y ait des effets secondaires en retirant (ngSubmit) du formulaire. BTW : J'ai observé que

<form (keydown.enter)="$event.preventDefault()" (keydown.shift.enter)="$event.preventDefault()"></form>

ont désactivé les validateurs personnalisés.

3voto

Anuj Points 23

Angular 6.x+ Pour empêcher la saisie dans une entrée spécifique, faites ceci :

<input type="text" (keydown)="$event.keyCode == 13 ? $event.preventDefault() : null">

2voto

kikaxa Points 51

J'ai eu le même problème, ceci m'a aidé :

<button type="submit" [disabled]="!myForm.valid">Save</button>

6 votes

Cela ne répondrait pas à la question de l'OP. Cela ne fait que désactiver le bouton d'envoi jusqu'à ce que le formulaire soit valide. Une fois que des données valides ont été saisies dans le champ d'entrée et que le bouton d'envoi a été activé, le bouton d'envoi est désactivé. Enter est pressé, le formulaire sera soumis.

1voto

jamesbcn Points 153

Angulaire 10

$event.preventDefault() n'a pas fonctionné pour moi - $event.stopPropagation l'a fait.

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