Javascript AngularJS数字文本输入:指令与函数

Javascript AngularJS数字文本输入:指令与函数,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我的项目有一个大约有16个文本字段的表单。输入需要是数字,不同的字段将具有不同的最小/最大值。我能够找到以下jsfiddle()并将解析调整为以下(): angular.module('myApp',[]).directive('numbersOnly',function(){ 返回{ 要求:'ngModel', 链接:函数(作用域、元素、属性、模型控制){ modelCtrl.$parsers.push(函数(inputValue){ 如果(inputValue==未定义){ 返回“”; }

我的项目有一个大约有16个文本字段的表单。输入需要是数字,不同的字段将具有不同的最小/最大值。我能够找到以下jsfiddle()并将解析调整为以下():

angular.module('myApp',[]).directive('numbersOnly',function(){
返回{
要求:'ngModel',
链接:函数(作用域、元素、属性、模型控制){
modelCtrl.$parsers.push(函数(inputValue){
如果(inputValue==未定义){
返回“”;
}  
var firstParse=inputValue.replace(/[^0-9.-]/g');
var safeParse=firstParse.charAt(0);
var prepParse=firstParse.substring(1,firstParse.length);
var secondParse=safeParse+preparse.replace(/[^0-9.]/g');
var n=secondParse.indexOf(“.”);
var转换输入;
如果(n==-1){
transformedInput=secondParse;
}  
否则{
safeParse=secondParse.substring(0,n+1);
firstParse=(secondParse.substring(n+1,secondParse.length)).replace(/[^0-9]/g',);
n=2;
如果(firstParse.length max){
风险价值;
如果(transformedInputmax){
returnValue=transformedInput.substring(0,transformedInput.length-1);
}  
否则{
returnValue=transformedInput;
}  
modelCtrl.$setViewValue(returnValue);
modelCtrl.$render();
}           
返回值;
});  
}  
};  
});  

我对解析很满意,但是min/max和precision值是硬编码的。我应该把它作为一个指令并传递变量吗?还是一个函数更合适?

一个可能的选择是完全避开自定义指令并使用input type=number属性

<input type="number" min="5" max="18" step="0.5" value="9" name="shoe-size">

更多信息请点击此处:


但并非所有浏览器都支持它,firefox的支持尤其滞后:

我会保持原样,并添加自定义属性以传递最小值和最大值:

<div ng-controller="Numeric">
    <br />
    <input type="text" ng-model="number" required="required" class="numbers-only" minvalue="-27" maxvalue="45" />
</div>

我已经把你的小提琴分叉,在这里做了更改:

你需要支持哪些浏览器?在当前的浏览器中,你可以指定
input type=number
。不需要任何指令。我们将支持Chrome、Firefox和Internet Explorer 8+。我尝试使用“input type=number”,但文本字段仍然允许我输入文本。
<div ng-controller="Numeric">
    <br />
    <input type="text" ng-model="number" required="required" class="numbers-only" minvalue="-27" maxvalue="45" />
</div>
var min = parseInt(attrs.minvalue);
var max = parseInt(attrs.maxvalue);