我有一个指令来检查输入值是否为数字,并根据执行操作
myApp.directive('numbersOnly', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attr, ngModelCtrl) {
function fromUser(text) {
if (text) {
var transformedInput = text.replace(/[^0-9-]/g, '');
if (transformedInput !== text) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
}
return undefined;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
});
以上代码将在我使用<input type="text"/>
时起作用,但当我使用<input type="number"/>
时,上述代码将停止工作。
请告诉我如何支持两者?
答案 0 :(得分:0)
你可以尝试下面的代码,其中还有一个条件(isNaN)在&#39;如果&#39;如下所示,
myApp.directive('numbersOnly', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attr, ngModelCtrl) {
function fromUser(text) {
if (text && isNaN(text)) {
var transformedInput = text.replace(/[^0-9-]/g, '');
if (transformedInput !== text) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
}
return undefined;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
});
答案 1 :(得分:0)
下面的代码解决了我的问题
myapp.directive('numbersOnly', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attr, ngModelCtrl) {
function fromUser(value) {
if (value) {
if(!isNaN(value)){
var text = value.toString();
}
else{
var text = value;
}
var transformedInput = text.replace(/[^0-9-]/g, '');
if (transformedInput !== text) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
}
return undefined;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
});
因此,此代码适用于这两种情况
<input type="text"/>
或<input />
以及<input type="number"/>