angularjs ng-minlength验证无效,表单仍在提交中

时间:2013-08-29 16:11:47

标签: angularjs angularjs-validation

我试图仅在成功验证时提交表单。 验证适用于所需但不适用于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/

我在做错了什么。

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

6 个答案:

答案 0 :(得分:29)

这就是你做错了:你混合了两个概念,Angular validatorsHTML5 validators

必需 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/

答案 1 :(得分:5)

我错误地使用了ngMaxlength="12" ngMinlength="6"代替ng-minlength="6" ng-maxlength="12",现在工作正常。

答案 2 :(得分:3)

ng-minlength&amp; mg-maxlength适用于AngularJS。 我在AngularJS 1.3版中测试了这个 请务必使用novalidate<form>来禁用浏览器的原生验证。

答案 3 :(得分: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" 

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这对我们工作

    <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>