我正在尝试使用以下技术格式化用户输入值,但我在Fire Bug控制台上收到以下错误
$(this).val()。toFixed不是函数
$(".amount-text").bind('change',function () {
$(this).val(($(this).val()).toFixed(2));
});
有人可以帮我吗?
答案 0 :(得分:29)
.val()
会返回一个字符串,要使用.toFixed()
对您需要先将其解析为数字的数字,如下所示:
$(".amount-text").bind('change',function () {
$(this).val(parseFloat($(this).val()).toFixed(2));
});
或者使用jQuery 1.4+,更清洁,至少对我来说use a function with .val()
:
$(".amount-text").bind('change',function () {
$(this).val(function(i, v) { return parseFloat(v).toFixed(2); });
});
答案 1 :(得分:6)
toFixed
仅适用于数字,首先将值解析为数字:
$(this).val(parseFloat($(this).val()).toFixed(2));
答案 2 :(得分:2)
这是因为val()
会返回String
而不是Number
。为了能够使用toFixed()
,请执行以下操作:
$(".amount-text").bind('change',function () {
$(this).val( (parseFloat($(this).val())).toFixed(2) );
});
甚至:
$(".amount-text").bind('change',function () {
$(this).val( (new Number($(this).val())).toFixed(2) );
});
你也可以稍微更加骇客:
$(".amount-text").bind('change',function () {
$(this).val( (0 + $(this).val()).toFixed(2) );
});
但我不建议将其用于可读性目的!
答案 3 :(得分:0)
HTML5将属性valueAsNumber
添加到了input
元素中,因此您无需自己应用parseFloat
。 (Documentation at MDN)