¿Cómo deshabilitar el botón 'enviar'?


127

¿Cómo deshabilitar el botón "Enviar" hasta que el formulario sea válido?

¿Angular2 tiene un equivalente a ng-disabled que se puede utilizar en el botón Enviar? (ng-disabled no funciona para mí)


1
solo cuando utiliza la validación inmediata, por ejemplo, al escribir. No haga esto ... solo con buen pensamiento o con validación asincrónica, que se basa en un backend, por ejemplo.
Sam Vloeberghs

Respuestas:


243

Como se ve en este ejemplo angular , hay una manera de deshabilitar un botón hasta que todo el formulario sea válido:

<button type="submit" [disabled]="!ngForm.valid">Submit</button>

¿Cómo obtener el valor de la radio y la casilla de verificación usando formBuilder?
Pardeep Jain

enlace referido tiene sintaxis antigua para angular2, por ejemplo ng-form-modal. pídale que actualice thanx.
Pardeep Jain

Verifique este ejemplo, la sintaxis está actualizada -> blog.jhades.org/…
Angular University

1
¿Cómo puede validar un formulario si desactiva el botón Enviar (a menos que lo haga en el flujo pero no siempre me gusta)? Tenga en cuenta las preocupaciones de UX aquí ..
Sam Vloeberghs

66
[disabled] = "ngForm.invalid" también puede consultar
shaunak1111

47

en Angular 2.xx , 4 , 5 ...

<form #loginForm="ngForm">
    <input type="text" required> 
    <button  type="submit"  [disabled]="loginForm.form.invalid">Submit</button>
</form>

7

.html

<form [formGroup]="contactForm">

<button [disabled]="contactForm.invalid"  (click)="onSubmit()">SEND</button>

.ts

contactForm: FormGroup;

Si bien este código puede responder la pregunta, proporcionar un contexto adicional sobre cómo y / o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
Nic3500

5

Aquí hay un ejemplo de trabajo (tendrá que confiar en mí que hay un método submit () en el controlador; imprime un Objeto, como {user: 'abc'} si se ingresa 'abc' en el campo de entrada):

<form #loginForm="ngForm" (ngSubmit)="submit(loginForm.value)">
    <input type="text" name="user" ngModel required>
    <button  type="submit"  [disabled]="loginForm.invalid">
        Submit
    </button>
</form>

Como puedes ver:

  • no use loginForm.form, solo use loginForm
  • loginForm.invalid funciona tan bien como! loginForm.valid
  • si desea que submit () reciba los valores correctos, el elemento de entrada debe tener los atributos name y ngModel

Además, esto es cuando NO está utilizando el nuevo FormBuilder, que recomiendo. Las cosas son muy diferentes cuando se usa FormBuilder.


4

La validación de formularios es muy sencilla en Angular 2

Aquí hay un ejemplo,

<form (ngSubmit)="onSubmit()" #myForm="ngForm">

 <div class="form-group">
  <label for="firstname">First Name</label>
  <input type="text" class="form-control" id="firstname" 
   required [(ngModel)]="firstname" name="firstname">
 </div>

 <div class="form-group">
  <label for="middlename">Middle Name</label>
  <input type="text"  class="form-control" id="middlename" 
   [(ngModel)]="middlename" name="middlename">
 </div>

 <div class="form-group">
  <label for="lastname">Last Name</label>
  <input type="text"  class="form-control" id="lastname" 
   required minlength = '2' maxlength="6" [(ngModel)] = "lastname" name="lastname">
 </div>

 <div class="form-group">
  <label for="mobnumber">Mob Number</label>
  <input type="text"  class="form-control" id="mobnumber"  
   minlength = '2' maxlength="10" pattern="^[0-9()\-+\s]+$" 
   [(ngModel)] = "mobnumber" name="mobnumber">
 </div>

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

</form>

Mira este plunker para la demostración

Más información


2

Es importante que incluya la palabra clave " requerida " dentro de cada una de sus etiquetas de entrada obligatorias para que funcione.

 <form (ngSubmit)="login(loginForm.value)" #loginForm="ngForm">
    ...
    <input ngModel required name="username" id="userName" type="text" class="form-control" placeholder="User Name..." />
    <button type="submit" [disabled]="loginForm.invalid" class="btn btn-primary">Login</button>

0

Puede estar debajo del código puede ayudar:

<button type="submit" [attr.disabled]="!ngForm.valid ? true : null">Submit</button>

0

Esto funcionó para mí.

.ts

newForm : FormGroup;

.html

<input type="button" [disabled]="newForm.invalid" />
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.