AngularJS 验证提交

Posted

技术标签:

【中文标题】AngularJS 验证提交【英文标题】:AngularJS validation on submit 【发布时间】:2016-03-05 02:14:40 【问题描述】:

我有一个注册表单,我希望在用户单击提交时进行验证。这是 html 的样子:

<form ng-submit="RegistrationC.fireReg()" novalidate name="register">
    <div class="row">
        <div class="col-md-6 form-group">
            <input type="text" autocomplete="off" class="form-control" placeholder="First Name" ng-model="RegistrationC.first_name" required name="first_name">
                    <div class="help-block" ng-messages="register.first_name.$error" ng-show="submitted && register.first_name.$error">
                        <p ng-message="required">This field is required.</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-6 form-group col-md-offset-3">
            <button type="submit" class="btn btn-success btn-block" ng-click="submitted=true">Register Now</button>
        </div>
    </div>
</form>

如果没有输入用户名,它会显示验证消息,但它仍然提交。我错过了什么?

编辑 1

//init.js - RegistrationController
reg_list.fireReg = function () 
    var url = 'user/register';
    api.makeCall(reg_list, url)
        .then(function (response) 
            reg_list.response = response;
            console.warn(response);
            $location.path('/user/verify');
        )
        .catch(function (errorMessage) 
            console.log("got an error in initial processing", errorMessage);
            event.restoreButton();
        );
;

我知道这个功能有问题,我会在稍后修复它们。

【问题讨论】:

你也可以添加RegistrationC.fireReg()的代码。还有为什么novalidation 在表单中? 嗨@Rajesh,我不希望触发 HTML5 验证。 :) Angularjs prevent form submission when input validation fails的可能重复 novalidate 是防止原生浏览器验证,使用是正确的 基本上,您需要在提交处理程序中检查formname.$valid 【参考方案1】:

仅在有效的情况下提交此表格。 &lt;whatever_form_name&gt;.$valid

<form ng-submit="register.$valid && RegistrationC.fireReg()" novalidate name="register">

【讨论】:

如果我把register.$valid放在第一位就可以了。谢谢! @Bilal nope buddy &amp;&amp; 条件将一直执行,直到它结束或发现为假。在您的回答中,首先将转到函数并开始执行该方法,然后它将进行验证检查。这怎么会停止提交表单?【参考方案2】:

在提交表单之前添加表单是否有效的检查点

这样试试

<form ng-submit="register.$valid && RegistrationC.fireReg()" novalidate name="register">

【讨论】:

要赞成这个,因为它是正确的,但问题首先由@Bilal 回答。【参考方案3】:

如果你想禁用 html5(或浏览器)验证器,你必须在你的 html 代码中删除 'required' 属性

http://www.the-art-of-web.com/html/html5-form-validation/

http://www.w3schools.com/tags/att_input_required.asp

【讨论】:

以上是关于AngularJS 验证提交的主要内容,如果未能解决你的问题,请参考以下文章

当输入验证失败时,Angularjs会阻止表单提交

AngularJS的表单验证提交示例

应禁用 angularjs 提交表单中的开始日期结束日期验证

angularjs中form表单提交验证

提交时的表单验证 - angularjs 1.5 - 当字段 $pristine 时 $invalid

angularjs提交按钮不起作用