AngularJS验证不检查步骤HTML数字输入的限制

AngularJS验证不检查步骤HTML数字输入的限制

问题描述:

为什么AngularJS不检查第二个输入的step="0.01"属性?对于minmax属性,它可以很好地工作,但不适用于step属性。AngularJS验证不检查步骤HTML数字输入的限制

例如:输入0,​​005将评估submitNewEntryForm.submitNewEntryAmount.$valid为true,但它不应该。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
 

 

 
<div ng-app=""> 
 

 
    <form class="form-inline" name="submitNewEntryForm"> 
 
    <div class="form-group" ng-class="submitNewEntryForm.submitNewEntrySubject.$valid ? 'has-success' : 'has-error'"> 
 
     <label for="subject">Betreff:</label> 
 
     <input type="text" class="form-control" id="subject" required name="submitNewEntrySubject" ng-model="submitNewEntrySubject"> 
 
    </div> 
 
    <div class="form-group" ng-class="submitNewEntryForm.submitNewEntryAmount.$valid ? 'has-success' : 'has-error'"> 
 
     <label for="amount">Betrag:</label> 
 
     <input type="number" class="form-control" id="amount" required name="submitNewEntryAmount" ng-model="submitNewEntryAmount" step="0.01" min="0" max="99999"> 
 
    </div> 
 
    <button type="submit" class="btn btn-primary" ng-disabled="!(submitNewEntryForm.submitNewEntrySubject.$valid && submitNewEntryForm.submitNewEntryAmount.$valid)" ng-click="">Submit</button> 
 
    </form> 
 

 
</div>

添加正则表达式,像\d+\.\d{0,2} 您可以使用HTML5 pattern="^\d+\.\d{0,2}$"ng-pattern="^\d+\.\d{0,2}$"。它将错误状态更改为不将html输入限制为2个小数点。

要严格,你应该使用^\d{1,5}\.\d{,2}$

如果你想数有2个小数点,但允许它是没有领先0.01,你可以使用^\d*\.\d{2}$

我并没有意识到,对于step属性有一个Angular指令。如果你看看文档,它似乎是一个非常新的补充。

直到你构建未发布的1.5.9版本时,我才发现没有提及step属性。

最新版本:在“用法”和“参数”的step指令列出部分https://docs.angularjs.org/api/ng/input/input%5Bnumber%5D

通知。现在使用左上方的下拉菜单更改版本,并注意到没有提及step指令。

要么这是一个全新的,未发布的功能...或许对旧版本的文件是不正确的:)

+1

'step'是input'标签的'HTML属性,所以你不能找到它在Angular documentation –

+0

@ v-andrew我的答案的第二句话说,数字输入的'step'指令记录在Angular 1.5.9的最新版本中。如果您阅读文档,他们会说它执行OP感兴趣的验证:) –

+0

但是,您的答案与问题无关。 –