0

问题:

我最近被要求在使用 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

4

1 回答 1

1

input type="number"只允许包含一个“浮点数”,所以不允许逗号

一些浏览器input type="number"确实接受包含十进制逗号的输入并将其转换为十进制句点,具体取决于用户或页面的区域设置,但其中有足够多的浏览器不这样做,如果您需要支持十进制逗号数字,最好避免这样做。

于 2017-08-10T11:53:02.897 回答