จะปิดการใช้งานปุ่ม 'ส่ง' ได้อย่างไร?


127

จะปิดการใช้งานปุ่ม "ส่ง" จนกว่าแบบฟอร์มจะถูกต้องได้อย่างไร?

angular2 มีคุณสมบัติเทียบเท่ากับ ng-disabled ที่สามารถใช้กับปุ่มส่งได้หรือไม่ (ng-disabled ไม่ได้ผลสำหรับฉัน)


1
เฉพาะเมื่อคุณใช้การตรวจสอบความถูกต้องในระดับกลางเช่นในการพิมพ์ อย่าทำสิ่งนี้ .. โดยใช้ความคิดที่ดีหรือด้วยการตรวจสอบความถูกต้องแบบอะซิงโครนัสที่อาศัยแบ็กเอนด์เป็นต้น
Sam Vloeberghs

คำตอบ:


243

ดังที่เห็นในตัวอย่าง Angular นี้มีวิธีปิดการใช้งานปุ่มจนกว่ารูปแบบทั้งหมดจะถูกต้อง:

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

วิธีรับค่าวิทยุและช่องทำเครื่องหมายโดยใช้ formBuilder
Pardeep Jain

เรียกว่าการเชื่อมโยงมีของไวยากรณ์เก่า angular2 ng-form-modalตัวอย่างเช่น ขอให้เขาอัปเดตขอบคุณ
Pardeep Jain

ตรวจสอบตัวอย่างนี้ไวยากรณ์เป็นปัจจุบัน -> blog.jhades.org/…
Angular University

1
คุณจะตรวจสอบความถูกต้องของแบบฟอร์มได้อย่างไรหากคุณปิดใช้งานปุ่มส่ง (เว้นแต่คุณจะทำในโฟลว์ แต่ฉันไม่ชอบแบบนั้นเสมอไป) โปรดรับทราบข้อกังวลเกี่ยวกับ UX ที่นี่ ..
Sam Vloeberghs

6
[disabled] = "ngForm.invalid" นอกจากนี้คุณยังตรวจสอบได้
shaunak1111


7

.html

<form [formGroup]="contactForm">

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

.ts

contactForm: FormGroup;

แม้ว่ารหัสนี้อาจตอบคำถามได้ แต่การให้บริบทเพิ่มเติมเกี่ยวกับวิธีการและ / หรือเหตุผลในการแก้ปัญหาจะช่วยเพิ่มมูลค่าในระยะยาวของคำตอบ
Nic3500

5

นี่คือตัวอย่างการทำงาน (คุณจะต้องเชื่อใจฉันว่ามีวิธี submit () บนคอนโทรลเลอร์ - มันพิมพ์ Object เช่น {user: 'abc'} ถ้าป้อน '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
  • หากคุณต้องการส่งผ่านค่าที่ถูกต้ององค์ประกอบอินพุตควรมีแอตทริบิวต์ 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>

ตรวจสอบตัวแปลงนี้สำหรับการสาธิต

ข้อมูลเพิ่มเติม


2

สิ่งสำคัญคือคุณต้องใส่คีย์เวิร์ดที่ " จำเป็น " ไว้ในแท็กอินพุตที่จำเป็นแต่ละแท็กเพื่อให้สามารถใช้งานได้

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.