22

我正在尝试仅在成功验证时提交表单。验证适用于 required 但不适用于 ng-minlength

表单输入无效,但表单仍在提交中。

<form name="myForm" ng-submit="count = count + 1" ng-init="count=0" ng-app>
 <div class="control-group" ng-class="{error: myForm.mobile.$invalid}">
        <label class="control-label" for="mobile">Mobile</label>
        <div class="controls">
            <input type="text" name="mobile" placeholder="07XXXXXXXXX" ng-model="mobile" ng-minlength="11"  required />
            <span ng-show="myForm.mobile.$error.required" class="help-inline">Required</span>
            <span ng-show="myForm.mobile.$error.minlength" class="help-inline">Mobile number should be minimum 11 character starting from 07</span>           
        </div>
    </div>

     <div class="control-group">
        <div class="controls">                       
            <input  class="btn" type="submit" value ="submit" />
        </div>

         count: {{count}}<br />

<tt>myForm.$invalid = {{myForm.$invalid}}</tt><br/>
    </div>
</form>

http://jsfiddle.net/pMMke/9/

我究竟做错了什么。

我不想使用提交按钮禁用方法。

4

6 回答 6

29

这就是你做错的事情:你混合了两个概念,Angular 验证器HTML5 验证器

例如,所需的HTML5 验证器声明:

如果存在,它指定在提交表单之前必须填写输入字段。

因此,如果您尝试提交具有此属性的输入的表单,它将向用户显示一条解释这一点的消息,并且会阻止发送表单。这是你想要的行为。为什么不适用于ng-minlength?因为ng-minlength是一个 Angular 验证器(你可以知道,因为它以ng- 开头),并且它不会向表单添加任何特殊行为。它只是将其所在位置的输入设置为无效(因此是表单),并让您决定如何处理它。

您有一个选择:您可以使用模式HTML5 验证器,指定字段至少需要 11 个字符。它会这样:

<input type="text" pattern=".{11,}">

因此,当您提交包含此输入的表单时,如果用户输入的字符少于 11 个,则不会发送该表单。

但是既然我们是它,并且您已经在使用模式验证器,您可以充分利用正则表达式,并定义如下内容:

<input type="text" pattern="07[0-9]{9}" />

它只接受 11 个字符的值,以“07”开头并且只包含数字。我已经修改了你的小提琴,向你展示它是如何工作的:http: //jsfiddle.net/helara/w35SQ/

于 2014-01-16T13:52:58.800 回答
5

我错误地使用ngMaxlength="12" ngMinlength="6"而不是ng-minlength="6" ng-maxlength="12",它现在工作正常。

于 2015-10-19T09:22:15.200 回答
3

两者都在 AngularJS 中工作ng-minlengthmg-maxlength我已经在 AngularJS 1.3 版中对此进行了测试。
确保使用novalidatewith<form>禁用浏览器的本机验证。

于 2014-10-29T19:34:38.420 回答
2

这应该有效:

输入手机号码

ng-show="myForm.mobile.$touched && myForm.mobile.$error.required"

对于最小长度

ng-show="myForm.mobile.$touched && myForm.mobile.$error.minlength"

对于最大长度

ng-show="myForm.mobile.$touched && myForm.mobile.$error.maxlength" 
于 2016-07-27T09:37:29.297 回答
1

这对我有用

    <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
        <input ng-minlength="11" class="mdl-textfield__input" type="text" name="cpf" id="cpf" ng-model="avaliacao.cpf" ng-required="true" ng-pattern="/^\d+$/">
        <label class="mdl-textfield__label" for="cpf">CPF *</label>
    </div>
    <p style="color: #d50000;" ng-show="myForm.cpf.$error.required && myForm.cpf.$dirty">Field Required</p>
    <p style="color: #d50000;" ng-show="myForm.cpf.$error.pattern">Only numbers</p>
    <p style="color: #d50000;" ng-show="myForm.cpf.$error.minlength">Min 11 Chars</p>
于 2017-04-12T18:36:57.227 回答
0

我面临同样的问题,我认为您只能禁用按钮或自己忽略输入的值。您还可以检查控制器中的 $valid 属性并忽略该值......这不是很好,但我没有找到其他方法。

于 2013-10-24T13:39:17.330 回答