使用 Angular ng-repeat 的表单有效性
Form validity using Angular ng-repeat
我有一个 Angular 表单,它正在解析一些JSON
数据。
我正在使用ng-repeat
渲染.但是,我遇到了一个问题,即当选择每个组中的radio button
时,表单永远不会有效。
我怀疑问题出在每个输入中的ng-model
,但我似乎无法找出在ng-repeat
内动态创建ng-model
的正确方法。
表单块代码:
<form name="posttestForm">
<alert ng-repeat="alert in alerts"
type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
<div class="well question-well" ng-repeat="question in questions">
<p>
<strong>{{question.question}}</strong>
</p>
<ul>
<li ng-repeat="answerswers in question.answers">
<input ng-model="Q[question.id]"
type="radio" name="Q{{question.id}}" value="{{answers.id}}"
required="" data-key="{{answers.isCorrect}}" />{{answers.answer}}
</li>
</ul>
</div>
<button type="submit" class="btn btn-primary" ng-click="EvaluatePosttest(3)"
ng-show="!TestPassed">
Submit Questions</button>
</form>
下面是一个 Plunkr,它显示了动态代码,并演示了当选择每个组中的单选按钮时,表单永远不会变为有效。
http://plnkr.co/edit/HQGPIOCdn3TGlE96CpK5?p=preview
这是一个使用静态内容的 Plunkr 显示它的工作。
http://plnkr.co/edit/ZFt2VnBfaQjuu73kaNQJ?p=preview
只需将其添加到您的JavaScript控制器中即可
$scope.Q = [undefined,undefined,undefined,undefined,undefined,undefined];
解释:您将ng模型设置为Q[question.id],但Q未定义,因此ng模型将永远不起作用。始终必须在控制器中初始化变量。它工作不初始化的唯一情况是当你这样做时: ng-model="test"
如果你这样做
ng-model="test.test"
ng-model="test[0]"
如果未正确初始化,它将永远无法工作。
您可以在控制器中执行自定义表单验证。在您的情况下:
$scope.Q = [];
$scope.$watch('Q', function (Q) {
$scope.posttestForm.$setValidity('count', Q.length >= $scope.questions.length);
}, true);
在其中,您可以执行任何所需的验证。
这是工作的 plunkr:http://plnkr.co/edit/7Ww4fjJzkDjifPaZ2QtG?p=preview
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何使用WCF服务和javascript表单post上传.doc文件
- Javascript生成的表单未提交
- 如何使用javascript或html下载PDF格式的填写表单
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- Ajax发布表单序列化,发布引号'
- 多级HTML表单
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在验证和发送邮件后更改联系人表单的 html
- AngularJS表单,检查有效性
- 当表单与jQuery插件混淆时,如何检查表单的有效性
- 使用 Angular ng-repeat 的表单有效性
- 如何从其他指令控制表单的有效性
- 如何在指令中检查跨封装表单的有效性?
- angularjs中的表单更改和有效性
- 检查没有名称的ng表单的有效性
- 如何使用jQuery检查表单的有效性
- 当文本字段发生变化时,检查表单的有效性,就像gmail注册表单一样