jQuery输入更改事件更新自我

时间:2018-08-17 15:22:03

标签: jquery

我正在尝试使用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>

2 个答案:

答案 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 ...这些/永远不应该用作验证器。