Javascript HTML输入-AngularJS-显示的数字不超过3位
当我在输入框中输入一个不包含小数或更多的4位数字时,当我单击out blur时,它会突然从数字输入框中消失。是货币过滤器在起作用吗 如果我将其记录到控制台,模型仍保留该值,它只是从视图中消失Javascript HTML输入-AngularJS-显示的数字不超过3位,javascript,html,angularjs,input,filter,Javascript,Html,Angularjs,Input,Filter,当我在输入框中输入一个不包含小数或更多的4位数字时,当我单击out blur时,它会突然从数字输入框中消失。是货币过滤器在起作用吗 如果我将其记录到控制台,模型仍保留该值,它只是从视图中消失 <div class="input-group col-sm-2"> <div class="input-group-addon">$</div> <input type="number" step="any" min="0" class="form
<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>
编辑:似乎number类型的HTML输入不接受逗号,是否有任何方法可以从指令中删除逗号
编辑:
编辑:快速修复是使用类型文本而不是数字作为输入,但这意味着模型现在将是字符串而不是浮点数。要从字符串中删除逗号,请执行以下操作:
element.val($filter('currency')((element.val().replace(',','') || 0), '', 2));
我用了亚历克斯答案的一个变体。基本上,由于货币过滤器添加了逗号,所以我必须在应用过滤器之后和发送到输入框之前立即删除它们
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,并避免使用字符串值。很可能不是货币过滤器。这个函数是什么updateSetupTotal?请参阅我添加的编辑。为什么要对美元金额使用float?应该使用ng model controller并更新viewValue。方法是错误的我以前没有使用货币过滤器,所以我忘了删除这些parseFloat函数,我现在要做的就是。这没有做任何事情,同样的问题。你问,似乎number类型的HTML输入不接受逗号,有没有办法从我的指令中删除逗号?这将从输入中删除逗号。它解决了这个问题。我理解,但出于某种原因,当我模糊输入框时,它仍然会使值消失。看到我的答案,必须进行更改。哦,你正在使用过滤器将字符串转换为数值?我不一定同意这种方法,但如果它对你有效,那么我想它会解决问题。我个人会做我自己的逻辑转换为数字,并使用过滤器仅用于显示。HTML输入数字输入类型是一个int。如果我登录到控制台,输入框的值将显示一个int,而不是像文本类型那样的字符串。或者我在这里搞混了吗?:过滤器格式化表达式的值以显示给用户。它们可以在视图模板、控制器或服务中使用,并且很容易定义自己的过滤器。检查它是否为数字的一种方法是将可疑值包装在isNaN值中。如果返回true,那么它不是一个数字。如果返回false,则它是一个numberI did console.logisNaNelement.val;在应用过滤器之前启用模糊,并设置为false。
element.val($filter('currency')((element.val().replace(',','') || 0), '', 2));
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(',',''));
});
}
};
}]);