我有一个带有一些字段的表单(使用ng-重复构建,所以我不知道有多少)。我在提交按钮中添加了
ng-disabled=form.field.$invalid
并添加到所有字段“必需”,但ng禁用的工作仅针对最后一个字段。我的代码:
<form name="form" novalidate>
<div ng-repeat="q in questions">
<textarea name="answer" type="text" ng-model="answers[$index]" required></textarea>
</div>
<button ng-disabled="form.answer.$invalid || form.answer.$pristine" type="submit" ng-click="submit(q)">'Submit'</button>
</form>
如何验证用户更改所有字段?谢谢!
发布于 2014-12-29 13:35:25
这是因为您的所有输入都有相同的名称,因此表单控制器实例的行为将只有一个名为answers
的属性,它将指向表单中具有该名称的最后一个ng模型。相反,使用ng-attr-name
为输入提供不同的名称,并可能附加$index
并使用表单的$invalid
属性,只要表单中的ng模型(带有约束)之一无效,表单就无效。因此,只需禁用按钮,直到窗体无效,因为它是窗体控制器上的catch属性。
<div ng-repeat="q in questions">
<!-- Provide dynamic form names -->
<textarea ng-attr-name="answer{{$index}}" type="text"
ng-model="answers[$index]" required></textarea>
</div>
<!-- Use form.$invalid -->
<button ng-disabled="form.$invalid || form.$pristine"
type="submit" ng-click="submit(q)">Submit</button>
angular.module('app', []).controller('ctrl', function($scope) {
$scope.questions = ["q1", "q2"]
$scope.answers = {};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<form name="form" novalidate>
<div ng-repeat="q in questions">
<textarea ng-attr-name="answer{{$index}}" type="text" ng-model="answers[$index]" required></textarea>
</div>
<button ng-disabled="form.$invalid || form.$pristine" type="submit" ng-click="submit(q)">Submit</button>
</form>
</div>
https://stackoverflow.com/questions/27696064
复制相似问题