Angularjs 将输入字段限制在角度为2位小数后
我在html页面上有许多输入框。我想限制用户输入2位小数后的任何数字。Guilherme Ferreira在他的博客中描述了这一点: 使用数字类型和步骤inerval创建数字输入Angularjs 将输入字段限制在角度为2位小数后,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在html页面上有许多输入框。我想限制用户输入2位小数后的任何数字。Guilherme Ferreira在他的博客中描述了这一点: 使用数字类型和步骤inerval创建数字输入 <input type="number" name="myDecimal" placeholder="Decimal" ng-model="myDecimal" *step="0.01" /> 然后在HTML中使用它: <input type="number" step="0.01" ng-mo
<input type="number" name="myDecimal" placeholder="Decimal" ng-model="myDecimal" *step="0.01" />
然后在HTML中使用它:
<input type="number" step="0.01" ng-model='somemodel' decimal-places>
您可以使用此指令实现相同的功能
.directive('validNumber', function () {
return {
require: '?ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
if (!ngModelCtrl) {
return;
}
ngModelCtrl.$parsers.push(function (val) {
var clean = val.replace(/[^0-9\.]+/g, '');
if (val !== clean || val.indexOf('.') != val.lastIndexOf('.')) {
if (val.indexOf('.') != val.lastIndexOf('.')) {
clean = clean.substring(0, clean.length - 1)
}
}
if (clean.indexOf('.') != -1) {
if (clean.length > (clean.indexOf('.') + 3)) {
clean = clean.substring(0, clean.length - 1)
}
}
ngModelCtrl.$setViewValue(clean);
ngModelCtrl.$render();
return clean;
});
element.bind('keypress', function (event) {
if (event.keyCode === 32) {
event.preventDefault();
}
});
}
};
})
此指令验证数字输入,并将输入字段限制为两个小数点。谢谢您的回复。但输入字段仍允许我在小数点后输入数字。请看一下:您能讨论到目前为止尝试了哪些解决方案,您研究了哪些资源来尝试解决您的问题,或者,您可以展示代码的当前状态以供进一步分析吗?我尝试使用下面的方法,并且成功了
<input type="number" step="0.01" ng-model='somemodel' decimal-places>
.directive('validNumber', function () {
return {
require: '?ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
if (!ngModelCtrl) {
return;
}
ngModelCtrl.$parsers.push(function (val) {
var clean = val.replace(/[^0-9\.]+/g, '');
if (val !== clean || val.indexOf('.') != val.lastIndexOf('.')) {
if (val.indexOf('.') != val.lastIndexOf('.')) {
clean = clean.substring(0, clean.length - 1)
}
}
if (clean.indexOf('.') != -1) {
if (clean.length > (clean.indexOf('.') + 3)) {
clean = clean.substring(0, clean.length - 1)
}
}
ngModelCtrl.$setViewValue(clean);
ngModelCtrl.$render();
return clean;
});
element.bind('keypress', function (event) {
if (event.keyCode === 32) {
event.preventDefault();
}
});
}
};
})