【问题标题】:Input value formatted with decimals用小数格式化的输入值
【发布时间】:2025-12-26 04:50:10
【问题描述】:

你好 SO 上的好人。

所以我在贷款计算器中有一个输入字段。在这里,我希望用户输入的输入值用小数格式化(例如,为了更容易区分 100000 和 1000000。)

如果我可以这样称呼它,我想使用 JavaScript 来进行这种“转换”,并且我在 MDN 文档中找到了一些关于名为“Intl.NumberFormat”的对象构造函数

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

并且我在自己的JS文件中粘贴如下:

// Changes Loan Amount input to decimal format

document.getElementById("amount").addEventListener("input", function(){
 new Intl.NumberFormat('en-CA', {style: "decimal"}).format(amount);
});

我的 HTML 看起来像这样:

<span class="input-group-text">$</span>
                  <input
                    type="text"
                    class="form-control"
                    id="amount"
                    placeholder="Loan Amount"
                  />

所以我正在寻找的结果是让用户输入时的输入看起来像这样:

而不是这个:

希望这很清楚。提前感谢您的帮助。

【问题讨论】:

  • 您是否使用任何类型的框架,例如 Angular 或 React?与您仅使用普通 JavaScript 相比,他们将有不同的方法来执行此操作。另外,您可以查看this CSS Tricks post
  • @Scrimothy ,到目前为止我还没有使用任何框架。所以我希望能够在 vanilla javascript 中做到这一点,因为我正在尝试学习基础知识,然后再转向框架。我会查看链接,谢谢!

标签: javascript forms input


【解决方案1】:

您没有使用格式化文本更新输入字段:

document.getElementById("amount").addEventListener("input", function(){
    document.getElementById("amount").value = new Intl.NumberFormat('en-CA', {style: "decimal"}).format(document.getElementById("amount").value);
});

但是,我认为您会希望从每次输入迭代中去除非数字字符,因此这可能更接近您想要的:

document.getElementById("amount").addEventListener("input", function(){
    document.getElementById("amount").value = new Intl.NumberFormat('en-CA', {style: "decimal"}).format(document.getElementById("amount").value.match(/\d+/g).join(''));
});

【讨论】:

  • 我尝试实现您所写的内容,但现在我的输入字段在输入字段中达到 3 个或更多数字时会重置。我在控制台中收到错误,请参阅下面链接中的图片。 gyazo.com/36cbdfead4c3ead76462dc64d0d01afb我的代码现在看起来像这样,请参见下面的链接:gyazo.com/…
  • 你使用了第二块吗?那应该使用正则表达式去除非数字。
  • 嗨,是的,我也试过了。它也没有帮助。我收到与之前发表的评论相同的错误。
  • .match 返回一个数组,因此您需要将其重新连接成一个字符串。我编辑了上面的第二个代码块。
  • 再次感谢您的评论。但是,您在第二个块中最近发布的代码出现了同样的错误。请在下面的链接中查看我的屏幕截图。现在,基于我对 RegEx 的了解不足,是不是“.value.match”属性不正确?再次感谢你的帮助。警报消息SS:gyazo.com/256a09652ed5e8b42be37ca4bc447f3e