我有一个自定义指令,将输入限制为特定符号,在我的例子中,仅限于数字。它是在filters on ng-model in an input之后创建的,它在text-type 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;
});
}
};
})
但是在数字输入的情况下我想使用输入类型=数字,而不是type = text:
<input type="number"
onlydigitinput="onlydigitinput" required="required" min="1" max="99" maxlength="2">
然后这是一个问题:我有基于min-max属性的正确验证,但我仍然可以输入所有符号,例如字母,并且指令不能正常工作。另外,maxlength似乎没有效果。我如何修改我的指令以使用type =“number”输入?
答案 0 :(得分:1)
这里有两个问题。首先,maxlength
属性不适用于输入类型number
。参见例如
maxlength ignored for input type=“number” in Chrome
其次,当输入类型为number
时,指令的函数仅在inputValue
参数为数字时才获取值。请参阅this fiddle作为示例(控制台输出可能会更清晰)。
修改强>
使用数字类型输入有多重要?如果微调器控制浏览器添加到输入字段并不是必需的,我可能会选择如下所述的自定义类型:How to create a custom input type?
我使用了非常相似的东西,例如:货币输入字段(带有本地化的小数分隔符等)。