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

标签 javascript angularjs angularjs-directive

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

但在数字输入的情况下,我想使用输入 type=number,而不是 type=text:

<input type="number"  
onlydigitinput="onlydigitinput" required="required" min="1" max="99" maxlength="2">

然后这是一个问题:我有基于最小-最大属性​​的正确验证,但我仍然可以输入所有符号,例如字母,并且指令无法正常工作。此外, maxlength 似乎没有效果。我如何修复我的指令以使用 type="number"输入?

最佳答案

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

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

编辑:

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

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

关于javascript - 指令限制输入不适用于 type=number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23953010/

相关文章:

angularjs - AngularJS Promise重试

javascript - 如何在 Angular 中使用复选框作为选项的下拉菜单?

angularjs - AngularJS 上的 UI 日历重复事件

angularjs - Ng-Repeat 内的 Angular JS 日期格式过滤器不格式化

javascript - 球与矩形碰撞检测 Canvas javascript

javascript - 如何缓存 JavaScript Date 对象?

Javascript 使用箭头键移动整个跨度

javascript - input type=image - onclick(), 将触发其事件,但在 jquery 中的功能上效果不佳

javascript - Angular $http POST 无法绑定(bind)数组

javascript - 如何防止动态 anchor 默认?