【问题标题】:Required field validation on submit in angular jsAngular js中提交时的必填字段验证
【发布时间】:2016-08-09 17:33:17
【问题描述】:

我需要在页面上显示两个必填字段。我有一个 datePattern 和必填字段检查。

我需要在提交时显示字段是必需的,而不输入字段。如果我输入一些东西,我的 datePattern 就可以正常工作。因为当我显示喜欢时它是必需的

Ng-show = Form.field1.$error.required && Form.field1.$pristine。这会在开始时显示所需的消息,但我希望在提交时使用它,一旦我编辑我的字段 datePattern 就可以了。

我已经尝试过 ng-click=submitted = true。并且 ng-submit=ctrl.submit() 它没有进入控制器..

有人可以帮忙吗...

【问题讨论】:

    标签: javascript angularjs forms validation


    【解决方案1】:

    我是这样解决的

    Form.$submitted && form.field1.$error.required && !form.field1.$touched

    【讨论】:

      【解决方案2】:
      <form ng-submit="validateForm()">
        <input ng-model="name">
        <span ng-show="invalidName">Please fill name field</span>
      </form>
      
      controller('MyController', function ($scope){
      
         $scope.validateForm = function(){
           if($scope.name){
             $scope.invalidName = true;
           }
      
          if($scope.invalidName){
            //Prevent submit
            return false;
      
          }else{
            //Handle submit here or do nothing for auto submit of form 
          }
      
      
         };
      
      });
      

      【讨论】:

      • 我不想从我的控制器设置
      【解决方案3】:

      我处理这个问题的方法(不保证这是最好的方法)是在提交函数上我将每个表单字段设置为 $touched,然后对于每个字段,当字段为 $error 和 $touched 时我会显示警告.

      jsfiddle

      HTML

      <div ng-app="app" ng-controller="ctrl">
        <div ng-form="forms.datesForm">
          <input type="text" ng-model="date" name=date required />
          <p ng-show="forms.datesForm.date.$touched && forms.datesForm.date.$invalid">Please select a date.</p>
          <br />
          Your date: {{date}}
          <button ng-click="submitForm()">Submit</button>
        </div>
        <p ng-show="submitted">
        Congrats, you submitted successfully!
        </p>
      </div>
      

      JS

      angular.module('app', []);
      
      angular.module('app').controller('ctrl', ['$scope', function ($scope) {
      
        $scope.forms = {};
      
        $scope.submitForm = function() {
          if ($scope.forms.datesForm.$invalid) {
            setAllFieldsTouched($scope.forms.datesForm);
            return;
          }
          else {
            // do whatever submit logic here
            $scope.submitted = true;
          }
        }
      
        var setAllFieldsTouched = function () {
          // loop through all the empty required fields 
          angular.forEach($scope.forms.datesForm.$error.required, function (field) {
            // only forms have $submitted properties, not fields
            if (field.hasOwnProperty('$submitted')) { // is a form, recur through it
              setAllFieldsTouched(field);
            }
            else { // this is a field
              field.$setTouched();
            }
          });
        }
      }]);
      

      【讨论】:

      • 感谢您的想法。但我不会触摸任何字段并提交然后我需要查看字段是否需要在以下条件下结帐
      • Ng-show = form.$submitted && form.field1.$error.required 这个怎么样?
      • 如果您单击某个字段然后离开它而不填写它,则不会显示。你的第一条评论是什么意思,我不太明白?
      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2014-03-07
      • 2017-08-15
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多