angularjs form reset error

前端 未结 13 1639
长发绾君心
长发绾君心 2020-12-03 04:14

i\'m trying to do a form with validations using angularjs and so far i did a good job. But when i commit my reset button all the fields reset except for the error messages i

相关标签:
13条回答
  • 2020-12-03 05:01

    I had the same problem and used the following code to completely reset the form :

    $scope.resetForm = function(){
    
        // reset your model data
        $scope.user = ...
    
        // reset all errors
        for (var att in  $scope.userForm.$error) {
            if ($scope.userForm.$error.hasOwnProperty(att)) {
                $scope.userForm.$setValidity(att, true);
            }
        }
    
        // reset validation's state
        $scope.userForm.$setPristine(true);
    };
    
    0 讨论(0)
  • 2020-12-03 05:03

    Give us your Feedback

    <!-- pass in the variable if our form is valid or invalid -->
    <form name="userForm" ng-submit="submitForm(userForm.$valid)" novalidate>
    
    
        <!-- NAME -->
        <div class="form-group" ng-class="{ 'has-error' : userForm.name.$invalid && !userForm.name.$dirty }">
            <label>Name*</label>
            <input type="text" name="name" class="item-input-wrapper form-control" ng-model="user.name"  required>
            <p ng-show="userForm.name.$invalid && !userForm.name.$pristine " class="help-block"><font color="#009ACD">You name is required.</font></p>
    
    
        </div>
    
         <!-- EMAIL -->
        <div class="form-group" ng-class="{ 'has-error' : userForm.email.$invalid && !userForm.email.$dirty  }">
            <label>Email</label>
            <input type="email" name="email" class="item-input-wrapper form-control" ng-model="user.email" required >
            <p ng-show="userForm.email.$invalid && !userForm.email.$pristine" class="help-block"><font color="#009ACD">Enter a valid email.</font></p>
        </div>
    
        <!-- USERNAME -->
        <div class="form-group" ng-class="{ 'has-error' : userForm.username.$invalid && !userForm.username.$dirty }">
            <label>Description</label>
            <input type="text" name="username" class="item-input-wrapper form-control" ng-model="user.username"  ng-minlength="5" ng-maxlength="60" required>
            <font color="white"><p ng-show="userForm.username.$error.minlength" class="help-block"><font color="#009ACD">Description is too short.</font></p>
            <p ng-show="userForm.username.$error.maxlength" class="help-block"><font color="#009ACD">Description is too long.</font></p>
        </div>
    
        <div class="col"style="text-align: center">
            <button align="left"class="button button-block button-reset"style="display: inline-block;width:100px;text-align:center "
            type="reset"
            ng-click="reset()"padding-top="true">Reset</button>
    
    
            <button class="button button-block button-positive"  style="display: inline-block; width:100px" ng-click="submit()"padding-top="true">Submit</button>
            </div>
    
    </form>
    

    0 讨论(0)
  • 2020-12-03 05:05

    In case you don't have a master (dynamic models from server), and you want to reset the form but only the binded part of the model you can use this snippet:

      function resetForm(form){
        _.forEach(form, function(elem){
          if(elem !== undefined && elem.$modelValue !== undefined){
            elem.$viewValue = null;
            elem.$commitViewValue();
          }
        });
      }
    

    And then you can use it with a standard reset button like so:

    <button type="reset" ng-click="resetForm(MyForm);MyForm.$setValidity();">reset</button>
    
    0 讨论(0)
  • 2020-12-03 05:07

    Use this

    <button type="button" ng-click='resetForm()'>Reset</button>
    

    In Controller

    $scope.resetForm = function(){
       $scope.userForm.$dirty = false;
       $scope.userForm.$pristine = true;
       $scope.userForm.$submitted = false;
    };
    

    Its working for me

    0 讨论(0)
  • 2020-12-03 05:10
    var original = $scope.user;
    

    when resetting :

    $scope.user= angular.copy(original);
    $scope.userForm.$setPristine();
    

    remove

    type='reset' in  <button>
    

    here is the Angular Documentation for form controllers.

    0 讨论(0)
  • 2020-12-03 05:10

    Use the following to reset dirty state

    $scope.form.$setPristine();
    

    Use the following to reset to clear validation

    $scope.form.$setValidity();
    
    0 讨论(0)
提交回复
热议问题