如何禁用“提交”按钮?


127

如何禁用“提交”按钮,直到表单有效?

angular2是否具有可以在“提交”按钮上使用的等效于ng-disabled的功能?(禁用ng的功能不适用于我。)


1
仅当您使用中间验证(例如键入时)时。不要仅出于良好的考虑或异步验证(例如依赖于后端)进行此操作。
Sam Vloeberghs

Answers:


243

如该Angular 示例所示,有一种方法可以禁用按钮,直到整个表单有效:

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

如何使用formBuilder获得单选和复选框的值?
Pardeep Jain

例如,被引用的链接具有angular2的旧语法ng-form-modal。请他更新thanx。
Pardeep Jain

检查此示例,语法是最新的-> blog.jhades.org/…–
Angular大学

1
如果您禁用了提交按钮,如何验证表单(除非您在流程中这样做,但我并不总是这样)?请注意此处的UX问题..
Sam Vloeberghs

6
[disabled] =“ ngForm.invalid”您也可以检查
shaunak1111

47

Angular 2.xx中45 ...

<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;

尽管此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高​​答案的长期价值。
Nic3500 '18

5

这是一个工作示例(您必须相信我,控制器上有一个commit()方法-如果在输入字段中输入了“ abc”,它会打印一个对象,例如{user:'abc'}):

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

如你看到的:

  • 不要使用loginForm.form,只需使用loginForm
  • loginForm.invalid和!loginForm.valid一样有效
  • 如果您希望将Submit()传递正确的值,则input元素应具有name和ngModel属性

另外,这是您不使用建议的新FormBuilder的时候。使用FormBuilder时,情况大不相同。


4

Angular 2中的表单验证非常简单

这是一个例子

<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>

检查这个punker进行演示

更多信息


2

重要的是,在每个强制性输入标记中都必须包含“ required ”关键字,这样它才能起作用。

 <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

可能下面的代码可以帮助您:

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

0

这对我有用。

.ts

newForm : FormGroup;

.html

<input type="button" [disabled]="newForm.invalid" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.