将文本输入中的值格式化为货币

Format value in text input to currency

提问人:Hans Niklas 提问时间:2/4/2023 最后编辑:pa7rykHans Niklas 更新时间:2/5/2023 访问量:300

问:

我制作了一个小计算器,我希望在只读输入文本中以货币格式显示总和。 由于我是 javascript 的新手(和这个论坛),我无法让它工作。 以为我下面的代码会起作用。谁能给我一些关于如何让它工作的指示?

<h2>Calculator/h2>

<input
  type="text"
  id="number1"
  value="0"
  onchange="summa.value = (number1.value*1) + (number2.value*1)"
/>

<br>

<input
  type="text"
  id="number2"
  value="0"
  onchange="summa.value = (number1.value*1) + (number2.value*1)"
/>

<br/><br/>

<input
  type="text"
  readonly="readonly"
  id="summa"
  value="0"
  onchange="this.value.toLocaleString("sv-SE", {
    style:"currency", 
    currency:"SEK",
    currencyDisplay:"symbol",
    maximumFractionDigits: 0
  });"
/>


JavaScript 输入 文本 货币

评论

0赞 Golam Moula 2/4/2023
您应该始终格式化您的代码 它有助于我们更好地阅读它 阅读本文以了解有关如何格式化代码的更多信息
0赞 Hans Niklas 2/4/2023
谢谢!现在我知道该怎么做了:-)
0赞 pilchard 2/4/2023
相当多的拼写错误,以及对输入的编程更改都不会触发事件。将方法抽象到自己的脚本中,然后适当地更新总数会更清晰。on change

答:

1赞 pilchard 2/4/2023 #1

您发布的代码显示了很多拼写错误,但它“不起作用”的主要原因是对输入的编程更改不会触发更改事件。将方法抽象到自己的脚本中,然后适当地处理更改并更新总数会更清晰。

下面是一个抽象为 html 和单独脚本的逻辑的最小示例。输入已更改为 type=“number”,以避免输入非数字值。然后,该脚本使用 getElementById 查询三个输入,并使用 addEventListener 将侦听器附加到两个接受输入的输入。最后,声明了一个函数,用于使用格式化值更新第三个输入的值。change

const number1 = document.getElementById('number1');
const number2 = document.getElementById('number2');
const summa = document.getElementById('summa');

function updateTotal() {
  const total = Number(number1.value) + Number(number2.value);
  summa.value = total.toLocaleString('sv-SE', {
    style: 'currency',
    currency: 'SEK',
    currencyDisplay: 'symbol',
    maximumFractionDigits: 0,
  });
}

number1.addEventListener('change', updateTotal);
number2.addEventListener('change', updateTotal);
<h2>Calculator</h2>

<input type="number" id="number1" value="0"/>
<br />
<input type="number" id="number2" value="0" />
<br />
<input type="text"  id="summa" readonly="true" value="0"/>

注意:将字符串强制转换为数字的方法有效,但有更透明的方法。在这里,我直接使用 Number 构造函数,但还有很多其他方法


如果你觉得你需要以内联方式完成这一切,你可以应用相同的逻辑,但你会立即注意到重复代码的数量。

<h2>Calculator</h2>

<input type="number" id="number1" value="0" onchange="summa.value = (Number(number1.value) + Number(number2.value)).toLocaleString('sv-SE', {
    style: 'currency',
    currency: 'SEK',
    currencyDisplay: 'symbol',
    maximumFractionDigits: 0,
});" />
<br />

<input type="number" id="number2" value="0" onchange="summa.value = (Number(number1.value) + Number(number2.value)).toLocaleString('sv-SE', {
    style: 'currency',
    currency: 'SEK',
    currencyDisplay: 'symbol',
    maximumFractionDigits: 0,
});" />
<br />

<input type="text" readonly="readonly" id="summa" value="0" />

或者,您可以包含内联脚本作为体面的折衷方案。

<h2>Calculator</h2>

<input type="number" id="number1" value="0" />
<br />
<input type="number" id="number2" value="0" />
<br />
<input type="text" id="summa" readonly="true" value="0" />

<script type="module">
  const number1 = document.getElementById('number1');
  const number2 = document.getElementById('number2');
  const summa = document.getElementById('summa');

  function updateTotal() {
    const total = Number(number1.value) + Number(number2.value);
    summa.value = total.toLocaleString('sv-SE', {
      style: 'currency',
      currency: 'SEK',
      currencyDisplay: 'symbol',
      maximumFractionDigits: 0,
   });
  }

  number1.addEventListener('change', updateTotal);
  number2.addEventListener('change', updateTotal);
</script>

评论

0赞 Yogi 2/4/2023
赞成投票,尽管我确实想知道当国家代码设置为萨尔瓦多 (sv) 且货币为瑞典克朗 (SEK) 时,这是如何工作的。
1赞 pilchard 2/4/2023
sv-SE是瑞典语(瑞典)与西班牙语(萨尔瓦多)的混淆es-SV
0赞 Yogi 2/4/2023
谢谢,你是对的。toLocaleString 需要 ISO-639 语言代码,而不是 ISO-3166 国家/地区代码。