限制输入的指令不适用于type = number

时间:2014-05-30 11:01:34

标签: javascript angularjs angularjs-directive

我有一个自定义指令,将输入限制为特定符号,在我的例子中,仅限于数字。它是在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”输入?

1 个答案:

答案 0 :(得分:1)

这里有两个问题。首先,maxlength属性不适用于输入类型number。参见例如 maxlength ignored for input type=“number” in Chrome

其次,当输入类型为number时,指令的函数仅在inputValue参数为数字时才获取值。请参阅this fiddle作为示例(控制台输出可能会更清晰)。

修改

使用数字类型输入有多重要?如果微调器控制浏览器添加到输入字段并不是必需的,我可能会选择如下所述的自定义类型:How to create a custom input type?

我使用了非常相似的东西,例如:货币输入字段(带有本地化的小数分隔符等)。