javascript - 通过指令格式化为货币格式时光标位置发生变化

标签 javascript angularjs angularjs-directive format

大家好,

我在输入元素上使用此货币格式指令,以便在输入时格式化为货币

        (function() {
var currencyFormatDir = function($filter) {
    return {
        require: '?ngModel',
        link: function(scope, elem, attrs, ctrl) {
            if (!ctrl)
                return;


            ctrl.$formatters.unshift(function(a) {
                var abs = $filter(attrs.currencyFormat)(ctrl.$modelValue);
                return $filter(attrs.currencyFormat)(ctrl.$modelValue);
            });

            ctrl.$parsers.unshift(function(viewValue) {
                var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
                elem.val($filter('number')(plainNumber));
                if (plainNumber === 0) {
                    return "";
                }
                else {
                    return plainNumber;
                }
            });
        }
    };
};
angular.module('myApp').directive('currencyFormat', ['$filter', currencyFormatDir]);})();

但是如果我想更改阀门,例如:假设我有数字 156 我想将其更改为 12,356 然后我将光标移动到图 1 的右侧并输入 23 但如果我在这里这样做,那么我最终会得到数字 12,563 发生这种情况是因为光标移至末尾。我不知道为什么会发生这种情况,有人可以帮我弄清楚为什么会发生这种情况。

最佳答案

如何设置一个超时,每次用户键入时都会重置该超时,以便在 1-2 秒后进行格式化?

关于javascript - 通过指令格式化为货币格式时光标位置发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644059/

相关文章:

javascript - 通过查找类和选中的复选框类型来获取自定义属性值的数组

javascript - 在 Angular 配置中使用带有 $http 和 $q 的服务/提供者

javascript - 无法从 angular.forEach 循环内更新全局变量

angularjs - 在angularjs中从$interval调用一个函数

javascript - angularJS scope.$watch 整个对象

javascript - 根据所选选项显示/隐藏不同的表单

javascript - 我的图像替换 javascript 需要更多帮助 - 将数组对象添加为类

javascript - 构造函数可以返回什么值来避免返回 this?

javascript - 将对象数组转换为字符串数组

angularjs - 如何强制重新验证表单?