Mam taki formularz:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button disabled="{{ myForm.$invalid }}">Save</button>
</form>
Jak widać, przycisk jest wyłączony, jeśli wejście jest puste, ale nie zmienia się z powrotem na włączony, gdy zawiera tekst. Jak mogę to zrobić?
Odpowiedzi:
Musisz użyć nazwy swojego formularza, a także ng-disabled: Oto demo na Plunker
źródło
<div ng-form="myForm"> ... stuff here .. </div>
. Chociaż, jeśli przesyłasz wartość z danych wejściowych, po naciśnięciu przycisku, bardzo polecam użycie<form/>
tagu, jeśli nie ma innego powodu niż pozwala użytkownikowi nacisnąć [ENTER] i przesłać formularz. Ale prawdopodobnie stanowi to również lepszą praktykę z powodu takich kwestii, jak problemy z dostępnością.Aby dodać do tej odpowiedzi. Właśnie się dowiedziałem, że również się zepsuje, jeśli użyjesz łącznika w nazwie formularza (Angular 1.3):
Więc to nie zadziała:
źródło
myForm.$invalid
powinno nadal działać, więc w twoim przypadku myślę, żemy_formset_name0.$invalid
powinno działać.Wybrana odpowiedź jest poprawna, ale ktoś taki jak ja może mieć problemy z walidacją asynchroniczną przy wysyłaniu żądania do serwera - przycisk nie będzie wyłączony podczas przetwarzania danego żądania, więc przycisk będzie mrugał, co dla użytkowników wygląda dość dziwnie.
Aby to unieważnić, wystarczy obsłużyć stan $ pending formularza:
źródło
!myForm.$valid
tego, który obsługuje również oczekujące problemy asynchroniczne. itnext.io/valid-and-invalid-in-angular-forms-61cfa3f2a0cdJeśli korzystasz z Reactive Forms, możesz użyć tego:
źródło
(click)
i[disabled]
nie są poprawnym kodem AngularJS, ani Reactive Forms nie są częścią frameworka AngularJS. „Angular to nazwa AngularaMożemy utworzyć prostą dyrektywę i wyłączyć przycisk, aż wszystkie obowiązkowe pola zostaną wypełnione.
Aby uzyskać więcej informacji, kliknij tutaj
źródło
ng-disabled
w angular 1.x i[disabled]
angular 2 | 4.x są znacznie lepiej przetestowane niż to? Po drugie, dlaczego mamy dyrektywę, która jest ograniczona do formularza, aby wyłączyć zagnieżdżony przycisk, jest super specyficzna. Źle przemyślane rozwiązanie IMO.Jeśli chcesz być nieco bardziej rygorystyczny
źródło