【问题标题】:Want to use Angularjs validation instead of Browser validation想要使用 Angularjs 验证而不是浏览器验证
【发布时间】:2016-07-31 17:57:39
【问题描述】:

我有一个包含两个 ng-forms 的表单,我在其中验证输入。我有两个关于表单的问题。

1) 在输入公司中,我想验证最小长度,但我的方法似乎不起作用。我该如何解决这个问题?

2) 我想对我的错误消息使用 Angularjs 验证,但浏览器自动显示“此输入无效”并且 Internet Explorer 根本不验证。我的错在哪里?我已经尝试过 nonvalidate 和 ng-required 但我的表单确实在没有验证的情况下提交。

这里是 plunkr 链接:Plunkr

提前致谢, 是的

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.billingAdrEqualsShippingAdr = false;
		 
		 $scope.confirmBillingEqualsShipping = true;
		 $scope.changeBillingAddress = false;
		 
		 $scope.shippingAddress = {};
		 $scope.billingAddress = {};

		 $scope.setBillingAddress = function (){
		   $scope.changeBillingAddress = true;
			 $scope.billingAddress = $scope.shippingAddress;
		 };
		 
		 $scope.cancelBillingAddress = function (){
		   $scope.changeBillingAddress = false;
			 $scope.billingAddress = $scope.shippingAddress;
		 };

		 $scope.openCompanyModal = function (company){
			 $scope.billingAddress = company;
			 $scope.shippingAddress = company;
		 };

		$scope.submit = function (){
		  console.log("Form submitted");
		}
});
<!DOCTYPE html>
<html ng-app="plunker">

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <link data-require="bootstrap-css@*" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <form name="addressForm" ng-submit="submit()">
      <div ng-form="shippingForm">
          <div class="row">
              <div class="col-md-12">
                  <h3 class="form-group">
                      <label>Lieferadresse</label>
                  </h3>
              </div>
          </div>
          <div class="row form-group">
              <div class="col-md-4">
                  <label>Salutation</label>
              </div>
              <div class="col-md-8">
                  <select name="salutation" ng-model="shippingAddress.salutation" class="form-control" ng-change="refreshBillingAddress()" ng-required="true">
                      <option></option>
                      <option value="Herr">Herr</option>
                      <option value="Frau">Frau</option>
                  </select>
                  <span ng-show="submitted && shippingForm.salutation.$error.required"></span>
              </div>
          </div>
          <div class="row form-group">
              <div class="col-md-4">
                  <label>Firsname</label>
              </div>
              <div class="col-md-8">
                  <input type="text" name="prename" ng-model="shippingAddress.prename" ng-required="true" class="form-control" ng-change="refreshBillingAddress()"/>
                  <span ng-show="submitted && shippingForm.prename.$error.required">Required</span>
              </div>
          </div>
          <div class="row form-group">
              <div class="col-md-4">
                  <label>Lastname</label>
              </div>
              <div class="col-md-8">
                  <input type="text" name="surname" ng-model="shippingAddress.surname" required="" class="form-control" ng-change="refreshBillingAddress()"/>
                  <span ng-show="submitted && shippingForm.surname.$error.required">Required</span>
              </div>
          </div>
          <div class="row form-group">
              <div class="col-md-4">
                  <label>Company</label>
              </div>
              <div class="col-md-8">
                  <input type="text" name="company" ng-model="shippingAddress.company" required="" ng-minlength="10" class="form-control" ng-change="refreshBillingAddress()"/>
                  <span ng-show="submitted && shippingForm.company.$error.required">Required</span>
                  <span ng-show="submitted && shippingForm.company.$error.minlength">Minlength = 10</span>
              </div>
          </div>
      </div >
      <div class="row">
          <div class="col-md-12">
              <h3 class="form-group">
                  <label>Rechnungsadresse</label>
                  <div ng-click="setBillingAddress()" ng-show="changeBillingAddress === false" class="btn btn-default pull-right">Ändern</div>
                  <div ng-click="cancelBillingAddress()" ng-show="changeBillingAddress === true" class="btn btn-danger pull-right">Abbrechen</div>
              </h3>
          </div>
          <div ng-show="changeBillingAddress == false" class="row">
              <div class="col-md-offset-1">Identisch mit Lieferadresse</div>
          </div>
      </div>
      <div ng-show="changeBillingAddress == true">
          <div style="margin-top: 5px">
              <div ng-form="billingForm">
                  <div class="row form-group">
                      <div class="col-md-4">
                          <label>Salutation</label>
                      </div>
                      <div class="col-md-8">
                          <select name="salutation" ng-model="billingAddress.salutation" ng-required="changeBillingAddress == true" class="form-control">
                              <option></option>
                              <option value="Herr">Herr</option>
                              <option value="Frau">Frau</option>
                          </select>
                          <span ng-show="submitted" class="help-block">Pflichtfeld</span>
                      </div>
                  </div>
                  <div class="row form-group">
                      <div class="col-md-4">
                          <label>Firstname</label>
                      </div>
                      <div class="col-md-8">
                          <input type="text" name="prename" ng-model="billingAddress.prename" ng-required="changeBillingAddress == true" class="form-control"/>
                          <span ng-show="submitted && billingForm.prename.required" class="help-block">Pflichtfeld</span>
                      </div>
                  </div>
                  <div class="row form-group">
                      <div class="col-md-4">
                          <label>Lastname</label>
                      </div>
                      <div class="col-md-8">
                          <input type="text" name="surname" ng-model="billingAddress.surname" ng-required="changeBillingAddress == true" class="form-control"/>
                          <span ng-show="submitted && billingForm.surname.$error.required"></span>
                      </div>
                  </div>
                  <div class="row form-group">
                      <div class="col-md-4">
                          <label>Company</label>
                      </div>
                      <div class="col-md-8">
                          <input type="text" name="company" ng-model="billingAddress.company" ng-required="changeBillingAddress == true" class="form-control"/>
                          <span ng-show="submitted && billingForm.company.$error.required"></span>
                      </div>
                  </div>
              </div>
          </div>
      </div>
      <div class="row">
          <div style="padding-top: 1em" class="col-md-12">
              <button ng-click="previousTab(0)" class="btn btn-default pull-left">Back</button>
              <button type="submit" class="btn btn-default pull-right">Next</button>
          </div>
      </div>
  </form>
</body>

</html>

【问题讨论】:

  • 您使用相同的ng-submit 方法嵌套了表单,但不确定它是如何工作的。此外,您在此处定义了表单名称:&lt;div ng-form="shppingForm" ng-submit="submit()"&gt;,但它有一个错字,缺少“i”。要防止浏览器验证,请在表单上使用 novalidate 指令。
  • 我现在更正了错字并从两个嵌套表单中删除了 ng-submit。但它仍然不起作用。我使用了两个嵌套表单,因为我不知道如何处理这个用例。

标签: javascript angularjs html forms validation


【解决方案1】:

这是你的 plunker,我纠正了一些部分(直到 Rechnungsaddresse):

http://plnkr.co/edit/luVETXTVCf2PkNAKzK1Z?p=preview

我猜你可以使用&lt;form name="addressForm"...&lt;div ng-form="addressForm" 但两者似乎都有问题。

submitted 从未设置,所以我按照我猜你想要的方式添加了它

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 2020-01-25
    • 2014-05-02
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多