Отключить кнопку "Отправить", когда форма недействительна с AngularJS
У меня есть такой:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button disabled="{{ myForm.$invalid }}">Save</button>
</form>
Как вы можете видеть, кнопка отключена, если вход пуст, но он не возвращается к включенному, когда он содержит текст. Как я могу заставить его работать?
6 ответов:
вам нужно использовать имя вашей формы, а также ng-disabled:вот демо на Plunker
<form name="myForm"> <input name="myText" type="text" ng-model="mytext" required /> <button ng-disabled="myForm.$invalid">Save</button> </form>
добавить к этому ответу. Я только что узнал, что он также сломается, если вы используете дефис в имени формы (угловой 1.3):
это не работы:
<form name="my-form"> <input name="myText" type="text" ng-model="mytext" required /> <button ng-disabled="my-form.$invalid">Save</button> </form>
выбранный ответ правильный, но у кого-то вроде меня могут возникнуть проблемы с асинхронной проверкой с отправкой запроса на сервер - кнопка не будет отключена во время обработки данного запроса, поэтому кнопка будет мигать, что выглядит довольно странно для пользователей.
чтобы аннулировать это, вам просто нужно обработать состояние $ pending формы:
<form name="myForm"> <input name="myText" type="text" ng-model="mytext" required /> <button ng-disabled="myForm.$invalid || myForm.$pending">Save</button> </form>
Если вы используете реактивные формы, вы можете использовать это:
<button [disabled]="!contactForm.valid" type="submit" class="btn btn-lg btn primary" (click)="printSomething()">Submit</button>
мы можем создать простую директиву и отключить кнопку, пока не будут заполнены все обязательные поля.
angular.module('sampleapp').directive('disableBtn', function() { return { restrict : 'A', link : function(scope, element, attrs) { var $el = $(element); var submitBtn = $el.find('button[type="submit"]'); var _name = attrs.name; scope.$watch(_name + '.$valid', function(val) { if (val) { submitBtn.removeAttr('disabled'); } else { submitBtn.attr('disabled', 'disabled'); } }); } }; } );