我正在尝试使用jQuery输入时更改事件来格式化和更新输入值。目标是使用固定的小数位数(即货币)格式化数字。
这是我的代码:(http://jsfiddle.net/xpvt214o/633563/)
我的选择器是类.format-currency
,因此我可以在所需的任何输入上使用它。
我可以获得所需的格式(输出到console.log
),但是我无法使用$( this ).val()
来更新窗体的值。有什么想法可以做到这一点吗?
$('.format-currency').on('input', function() {
var $input = parseFloat($(this).val());
if (isNaN($input)) {
return false;
}
console.log('DEBUG — change in .format-currency — $input ⇒ ' + $input + ' — new val ⇒ ' + $input.toLocaleString('en-US', {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
useGrouping: false,
}));
$(this).val($input.toLocaleString('en-US', {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
useGrouping: false,
}));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input type='number' class='format-currency' min='0.00' max='9999.99' step='0.01' name='fee' />
</form>
答案 0 :(得分:0)
仅将其解析为两位小数怎么办?并更新blur
事件。您可以使用parseFloat
。像...
$('.format-currency').on('blur', function(){
const v = $(this).val();
if(isNaN(v) || v === "")//this line may need amending depending on validation
return false;
$(this).val(parseFloat(v).toFixed(2));
});
答案 1 :(得分:0)
我猜想这不能完成,因为输入类型是数字,所以val()存储为浮点数。我想我可以将类型更改为text,但是那样我会丢失min,max和step ...这些/永远不应该用作验证器。