Disable submit button when form invalid with AngularJS

后端 未结 6 801
不思量自难忘°
不思量自难忘° 2020-11-28 19:31

I have my form like this:

相关标签:
6条回答
  • 2020-11-28 19:56

    Selected response is correct, but someone like me, may have issues with async validation with sending request to the server-side - button will be not disabled during given request processing, so button will blink, which looks pretty strange for the users.

    To void this, you just need to handle $pending state of the form:

    <form name="myForm">
      <input name="myText" type="text" ng-model="mytext" required />
      <button ng-disabled="myForm.$invalid || myForm.$pending">Save</button>
    </form>
    
    0 讨论(0)
  • 2020-11-28 19:58

    You need to use the name of your form, as well as ng-disabled: Here's a demo on Plunker

    <form name="myForm">
        <input name="myText" type="text" ng-model="mytext" required />
        <button ng-disabled="myForm.$invalid">Save</button>
    </form>
    
    0 讨论(0)
  • 2020-11-28 20:08

    <form name="myForm">
            <input name="myText" type="text" ng-model="mytext" required/>
            <button ng-disabled="myForm.$pristine|| myForm.$invalid">Save</button>
    </form>

    If you want to be a bit more strict

    0 讨论(0)
  • 2020-11-28 20:11

    If you are using Reactive Forms you can use this:

    <button [disabled]="!contactForm.valid" type="submit" class="btn btn-lg btn primary" (click)="printSomething()">Submit</button>
    
    0 讨论(0)
  • 2020-11-28 20:11

    We can create a simple directive and disable the button until all the mandatory fields are filled.

    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');
        }
       });
      }
     };
    }
    );
    

    For More Info click here

    0 讨论(0)
  • 2020-11-28 20:14

    To add to this answer. I just found out that it will also break down if you use a hyphen in your form name (Angular 1.3):

    So this will not work:

    <form name="my-form">
        <input name="myText" type="text" ng-model="mytext" required />
        <button ng-disabled="my-form.$invalid">Save</button>
    </form>
    
    0 讨论(0)
提交回复
热议问题