Как отключить кнопку «Отправить»?

127

Как отключить кнопку «Отправить» до тех пор, пока форма не станет действительной?

Есть ли у angular2 эквивалент ng-disabled, который можно использовать на кнопке «Отправить»? (ng-disabled у меня не работает.)

Bonneville
источник
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 здесь ..
Сэм Влоебергс
6
[disabled] = "ngForm.invalid" вы также можете проверить
shaunak1111
47

в Angular 2.xx , 4 , 5 ...

<form #loginForm="ngForm">
    <input type="text" required> 
    <button  type="submit"  [disabled]="loginForm.form.invalid">Submit</button>
</form>
Bougarfaoui El houcine
источник
7

.html

<form [formGroup]="contactForm">

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

.ts

contactForm: FormGroup;
alvic
источник
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
Nic3500
5

Вот рабочий пример (поверьте мне, что на контроллере есть метод submit () - он печатает объект, например {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
  • если вы хотите, чтобы submit () передавалось правильное значение (я), элемент ввода должен иметь атрибуты 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>

Проверьте этот плункер для демонстрации

Больше информации

Prashobh
источник
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" />
Bereket Gebredingle
источник