【问题标题】:HTML Input - AngularJS - Doesn't display more than 3 digitsHTML 输入 - AngularJS - 不显示超过 3 位数字
【发布时间】:2015-07-09 03:45:34
【问题描述】:

当我在输入框中输入 4 位数(不包括小数)或更多位数时,当我点击退出时,它突然从数字输入框中消失(模糊)。会不会是货币过滤器在做呢?

如果我将它记录到控制台,模型仍然保留该值,它只是从视图中消失。

<div class="input-group col-sm-2">
    <div class="input-group-addon">$</div>
    <input type="number" step="any" min="0" class="form-control" id="promoSetupFee" data-ng-model="fees.setup.promo" data-ng-format-curr data-ng-blur="updateSetupTotal()">
</div>

crtPromoDir.directive('ngFormatCurr', ['$timeout', '$filter', function($timeout, $filter)
{
    return {
        link: function(scope, element, attrs)
        {
            $timeout(function()
            {
                element.val($filter('currency')((element.val() || 0), '', 2));
            });

            element.blur(function()
            {
                element.val($filter('currency')((element.val() || 0), '', 2));
            });
        }
    };
}]);

编辑:似乎数字类型的 HTML 输入不接受逗号,有什么办法可以从我拥有的指令中删除逗号?

编辑:

$scope.updateSetupTotal = function()
{
    $scope.fees.setup.total = (parseFloat($scope.fees.setup.promo) || 0.00)+(parseFloat($scope.fees.setup.loc) || 0.00)+(parseFloat($scope.fees.setup.premium) || 0.00)+(parseFloat($scope.fees.setup.content) || 0.00);

    $scope.updatePromoTotal();
};

编辑:快速修复是使用类型文本而不是数字作为输入,但这意味着模型现在将是字符串而不是浮点数。

【问题讨论】:

  • 它不太可能是货币过滤器。 updateSetupTotal()这个函数是什么?
  • 查看我添加的编辑。
  • 你为什么用浮点数来计算美元金额?
  • 您应该使用ng-model 控制器并更新viewValue。方法不对
  • 我之前没有使用货币过滤器,所以我忘了删除我现在要做的那些 parseFloat 函数。

标签: javascript html angularjs input filter


【解决方案1】:

我通过使用亚历克斯答案的变体使其工作。基本上,由于currency 过滤器添加了逗号,因此我必须在应用该过滤器之后并将其发送到输入框之前立即将其删除。

crtPromoDir.directive('ngFormatCurr', ['$timeout', '$filter', function($timeout, $filter)
{
    return {
        link: function(scope, element, attrs)
        {
            $timeout(function()
            {
                element.val($filter('currency')((element.val() || 0.00), '', 2).replace(',',''));
            });

            element.blur(function()
            {
                element.val($filter('currency')((element.val() || 0.00), '', 2).replace(',',''));
            });
        }
    };
}]);

这使我可以将模型保持为 int 并避免使用字符串值。

【讨论】:

  • 哦,您正在使用过滤器将您的字符串转换为数值?我不一定同意这种方法,但如果它对你有用,那么我想可以解决它。我个人会按照自己的逻辑转换为数字并仅使用过滤器进行显示。
  • 那么HTML输入数字输入类型是int。如果我将输入框的值登录到控制台,它会显示一个 int,而不是像文本类型这样的字符串。还是我在这里混淆了?
  • Angular Docs: 过滤器格式化表达式的值以显示给用户。它们可用于视图模板、控制器或服务,并且很容易定义您自己的过滤器。 检查它是否为数字的一种方法是将可疑值包含在 isNaN( value ) 中。如果返回 true,那么它是“不是数字”。如果它返回false,那么它是一个数字
  • 我在应用滤镜之前对模糊进行了console.log(isNaN(element.val())); 并得到了false
【解决方案2】:

要从字符串中删除逗号,请执行以下操作:

element.val($filter('currency')((element.val().replace(',','') || 0), '', 2));

【讨论】:

  • 这没有做任何事情,同样的问题。
  • 你问过,It seems HTML input of type number doesn't accept commas, is there any way I can remove commas from the directive I have? 这会从输入中删除逗号。它解决了这个问题。
  • 我明白,但由于某种原因,当我模糊输入框时,它仍然使值消失。
  • 看到我的答案,不得不做出改变。
猜你喜欢
  • 2020-12-05
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多