我试图仅在成功验证时提交表单。 验证适用于所需但不适用于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>
我在做错了什么。
我不想使用提交按钮禁用方法。
答案 0 :(得分:29)
这就是你做错了:你混合了两个概念,Angular validators和 HTML5 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>