javascript - 输入动态填充时 AngularJS 表单验证失败

标签 javascript html angularjs angular-directive angular-validation

我有以下表格:
enter image description here
如果我点击一颗星,输入将自动填充点击的星号。 (点击第 3 颗星,输入将填充数字“3”,如下图所示)

enter image description here
星星下面的输入是 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>&nbsp;{{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>

进入问题:

如果我点击一个星星,输入动态填充一个数字,表单将无法验证,如下图所示:

enter image description here

我在表单有效的输入中手动写了一个数字,我可以点击提交按钮。

但为什么如果我在输入中手动输入一个数字,表单就会生效,我可以点击“提交”按钮,如果输入是通过选择一个星标自动填充的,表单就不会生效,我无法点击“提交”按钮?

最佳答案

当你点击星标时,在赋值时手动变脏。

angular.forEach($scope.form.$error.required, function(field) {
    field.$setDirty();
})

您可以使用 $setViewValue(value, trigger) 方法。当控件想要更改 View 值时将调用此方法。 引用here

关于javascript - 输入动态填充时 AngularJS 表单验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44668289/

相关文章:

angularjs - Angular js 从默认值初始化 ng-model

javascript - 如何在 bxslider 中获取一组事件幻灯片?

javascript - 什么更快?以恒定频率刷新整个表。或以相同的频率刷新必要的行

javascript - 我如何通过同一类的类名获取所有元素?

html - HTML 转换器将忽略 Markdown 中的注释

HTML 输入元素被父容器剪裁

javascript - 如何模拟在 AngularJS Jasmine 单元测试中返回 promise 的服务?

javascript - 固定位置的顶部和左侧值在各种浏览器中发生变化

Jquery 使一个 Div 成为可点击的表单区域

java - 用于 eclipse juno 的 AngularJs 插件