用带有角度指令的输入(类型=数字)中的逗号替换键盘周期

时间:2017-08-03 10:59:36

标签: javascript angularjs replace angularjs-directive numeric-input

问题:

我最近被要求在我的使用angular构建的spa应用程序中的字段中插入数字时,用逗号替换键盘周期的功能。 我决定采用指令方法,以便将来能够轻松地重复使用它并在其中取得部分成功,但它仅适用于

input type="text"

上尝试相同的解决方案时
input type="number"

字段重置,我收到以下错误:

  

ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.js:3501指定的值" 12,"不是有效的数字。该值必须与以下正则表达式匹配: - ?(\ d + | \ d +。\ d + + |。\ d +)([eE] [ - +]?\ d +)?

但是当我输入时,12,没有引发任何错误。

关于为什么以及如何让它在数字输入上工作的任何想法?

代码:

'use strict';

myApp.directive('replaceKeypadComma', function() {
    return {
        restrict: 'A',
        link: function($scope, element, attrs, controller) {
            element.on('keydown', function(event) {
                if (event.keyCode == 110) {
                    element.val(element.val() + ',');
                    event.preventDefault();
                }
            });
        }
    }
});

使用文字输入工作Plunker:

https://plnkr.co/edit/hBThZOI1T4rk3cbwRscq

数字输入破碎的Plunker:

https://plnkr.co/edit/zBqwWmZ0iAhIH728ZeCh

1 个答案:

答案 0 :(得分:1)

input type="number"只允许包含“floating point numberdoesn't allow commas

Some browsers接受包含小数点逗号的输入并将其转换为小数句点,具体取决于用户或页面的区域设置,但是它们中的大部分都不会这样做,因此最好避免使用{{1}如果你需要支持十进制逗号数字。