Angularjs表单验证显示页面加载成功

angularjs form validation showing success on page load

本文关键字:加载 成功 显示 表单 验证 Angularjs      更新时间:2023-09-26

我的控制器中有一个函数来验证可用复选框和一个自由文本区域中是否有最多三个选择。用户可以选择三个复选框并将文本区域保留为空,也可以选择两个复选框并在文本区域键入一些文本。三个的组合是允许的。该字段为required,用户必须选择三者的组合。函数本身正在工作,但验证显示成功!问题是,当页面加载时,所有的选项都变成绿色,并显示成功消息,而用户甚至没有点击它的任何部分。

下面是html代码:

<form name="Form">
    <div class="form-group" >
        <div class="form-group" ng-class="{'has-error':Form.cooptype.$dirty && Form.cooptype.$invalid, 'has-success':Form.cooptype.$valid}">
        <label class="control-label" translate="list.cooporationtype">
            Type(s) of project<span class="symbol required"></span>
        </label>
        :<br/>
        <div ng-repeat="topic in list.cooperationtypelist">
            <div > {{topic.item}}</div>
            <ul >
                <li ng-repeat="subitem in topic.subitems">
                    <input type="checkbox" name="cooptype"
                           ng-disabled="checkboxDisable(subitem.key)"
                           ng-model="myModel.cooperationtype[subitem.key]">
                            {{subitem.values | translate}}
                </li>
            </ul>
            <span class="error text-small block" ng-if="Form.cooptype.$dirty && Form.cooptype.$error.required">Field is required.</span>
            <span class="success text-small" ng-if="Form.cooptype.$valid">Done!</span>
        </div>
        </div>
        <div class="form-group" ng-class="{'has-error':Form.cooptypetext.$dirty && Form.cooptypetext.$invalid, 'has-success':Form.cooptypetext.$valid}">
            <p>or type it in yourself:</p>
            <textarea type="text" class="form-control" name="cooptypetext" placeholder="Enter the cooperation type (max of 100 characters)"
                      ng-model="myModel.cooperationtype.coopfreetext"
                      ng-disabled="checkboxDisable('cooptypetext')"
                      ng-minlength=5
                      ng-maxlength=100></textarea>
            <span class="error text-small block" ng-if="Form.cooptypetext.$error.maxlength">Too long!</span>
            <span class="error text-small block" ng-if="Form.cooptypetext.$error.minlength">Too short!</span>
            <span class="success text-small" ng-if="Form.cooptypetext.$valid">Done!</span>
        </div>
    </div>
</form>

这是我的控制器中的函数:

$scope.myModel.cooperationtype = {};
$scope.checkboxDisable = function(key) {
    if(!$scope.myModel.cooperationtype[key]) {
        var count = 0;
        Object.keys($scope.myModel.cooperationtype).forEach(function(key) {
            if($scope.myModel.cooperationtype[key]) {
                ++count;
            }
        });
        if(count >= 3) {
            return true;
        }
    }
    return false;
};

您需要检查以确保字段是脏的,也就是说,除了有效之外,用户还在其中键入了一些输入。您还需要使用ng-form,而不是div