【发布时间】:2014-07-20 02:52:39
【问题描述】:
我有一个自定义指令,将输入限制为特定符号,在我的例子中,只有数字。它是在filters on ng-model in an input 之后制作的,在文本类型的 inpit 中运行良好。
指令声明为
.directive('onlydigitinput', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function (inputValue) {
var transformedInput = inputValue.toLowerCase().replace(/ /g, '').replace(/[^0-9]+/g, '');
if (transformedInput != inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
})
但在数字输入的情况下,我想使用输入类型=数字,而不是类型=文本:
<input type="number"
onlydigitinput="onlydigitinput" required="required" min="1" max="99" maxlength="2">
然后这是一个问题:我基于 min-max 属性进行了正确的验证,但我仍然可以输入所有符号,例如字母,并且指令无法正常工作。此外, maxlength 似乎没有效果。我如何才能修复我的指令以使用 type="number" 输入?
【问题讨论】:
-
该指令仅删除空格并使所有内容变为小写,它不会阻止输入非数字字符。
-
@Quad,还有这个表达式:.replace(/[^0-9]+/g, '');
-
哎呀,没看到。但正如 MJV 所说,这可能是因为你得到一个数字为
inputValue而不是字符串。
标签: javascript angularjs angularjs-directive