AngularJS 输入动态填充时表单验证失败
AngularJS form validation failing when input populated dynamic
我有以下表格:
如果我点击一颗星,输入将自动填充点击的星号。 (点击第 3 颗星,输入将填充数字“3”,如下图所示)
星星下面的输入是 ng-required="true"
。
<form name="completeSurveyForm" role="form" novalidate ng-submit="vm.save()">
<ul class="question-list">
<li data-ng-repeat="question in vm.survey.questions | orderBy:'conditionalOrderId' track by question.id ">
<small class="label label-primary pull-right">{{question.questionTypeName}}</small>
<h3>
<b>{{$index +1 }}.</b> {{question.questionBody}}
</h3>
<hr> <!-- Replace here with directives -->
<div data-ng-switch="question.questionType">
<numericrange question="question" data-ng-switch-when="NUMERIC_CHOICE" />
</div>
</li>
</ul>
<button type="submit" ng-disabled="completeSurveyForm.$invalid " class="btn btn-primary">
<span data-translate="fqApp.business.form.submit">Submit</span>
</button>
</form>
数字范围指令如下所示:
<div class="row">
<div class="col-md-2" ng-if="!completed">
<div>
<span ng-mouseover="showHovered($event)" ng-mouseleave="clearStars($event)" ng-click="selectStar($event)"
data-ng-repeat="sym in range(startNonActive(question), question.maxValue, 1)" class="{{question.symbol}} starred-element" value="{{$index}}">
</span>
<input type="number" name="{{question.id}}"
data-ng-model="question.numericValue"
data-ng-value="numberOfSelectedStars" ng-required="true" />
</div>
</div>
</div>
进入问题:
如果我点击一个星星,输入动态填充一个数字,表单将无法验证,如下图所示:
我在输入框里手动写了一个数字是有效的,我可以点击提交按钮。
但为什么如果我在输入中手动输入一个数字,表单就会生效,我可以单击 'submit' 按钮,如果通过选择星号自动填充输入,则表单未验证,我无法单击 'submit' 按钮?
当您点击星标时,在分配值时手动变脏。
angular.forEach($scope.form.$error.required, function(field) {
field.$setDirty();
})
或
您可以使用$setViewValue(value, trigger)
方法。当控件想要更改视图值时将调用此方法。
参考 here
我有以下表格:
如果我点击一颗星,输入将自动填充点击的星号。 (点击第 3 颗星,输入将填充数字“3”,如下图所示)
星星下面的输入是 ng-required="true"
。
<form name="completeSurveyForm" role="form" novalidate ng-submit="vm.save()">
<ul class="question-list">
<li data-ng-repeat="question in vm.survey.questions | orderBy:'conditionalOrderId' track by question.id ">
<small class="label label-primary pull-right">{{question.questionTypeName}}</small>
<h3>
<b>{{$index +1 }}.</b> {{question.questionBody}}
</h3>
<hr> <!-- Replace here with directives -->
<div data-ng-switch="question.questionType">
<numericrange question="question" data-ng-switch-when="NUMERIC_CHOICE" />
</div>
</li>
</ul>
<button type="submit" ng-disabled="completeSurveyForm.$invalid " class="btn btn-primary">
<span data-translate="fqApp.business.form.submit">Submit</span>
</button>
</form>
数字范围指令如下所示:
<div class="row">
<div class="col-md-2" ng-if="!completed">
<div>
<span ng-mouseover="showHovered($event)" ng-mouseleave="clearStars($event)" ng-click="selectStar($event)"
data-ng-repeat="sym in range(startNonActive(question), question.maxValue, 1)" class="{{question.symbol}} starred-element" value="{{$index}}">
</span>
<input type="number" name="{{question.id}}"
data-ng-model="question.numericValue"
data-ng-value="numberOfSelectedStars" ng-required="true" />
</div>
</div>
</div>
进入问题:
如果我点击一个星星,输入动态填充一个数字,表单将无法验证,如下图所示:
我在输入框里手动写了一个数字是有效的,我可以点击提交按钮。
但为什么如果我在输入中手动输入一个数字,表单就会生效,我可以单击 'submit' 按钮,如果通过选择星号自动填充输入,则表单未验证,我无法单击 'submit' 按钮?
当您点击星标时,在分配值时手动变脏。
angular.forEach($scope.form.$error.required, function(field) {
field.$setDirty();
})
或
您可以使用$setViewValue(value, trigger)
方法。当控件想要更改视图值时将调用此方法。
参考 here