在 <input type="number" /> 中将值设置为货币

IT技术 javascript jquery html currency-formatting
2021-03-01 17:45:56

我正在尝试使用 javascript 将用户输入的数字格式化为货币。这在<input type="text" />. 但是,<input type="number" />我似乎无法将值设置为包含非数字值的任何内容。以下小提琴显示了我的问题

http://jsfiddle.net/2wEe6/72/

无论如何我可以将值设置为类似的值$125.00吗?

我想使用<input type="number" />移动设备知道调出数字输入的键盘。

5个回答

添加step="0.01"<input type="number" />参数:

<input type="number" min="0.01" step="0.01" max="2500" value="25.67" />

演示:http : //jsfiddle.net/uzbjve2u/

但是美元符号必须留在文本框之外......每个非数字或分隔符都将被自动裁剪。

否则,您可以使用经典文本框,如此处所述

HTML5 规范/实现是有问题的@patrick。除了hackish 的、依赖浏览器的解决方案之外,你想要的东西是不可能的,但它在 Firefox 上不起作用。顺便说一句,我已经编辑了小提琴,因为该Globalize.format功能现在在 FF中完全破坏了它,所以我想我应该感谢您的反馈:)
2021-04-24 17:45:56
@AndreaLigios 您描述为经典文本框的链接正是我在为文本框设置货币格式时所寻找的。我不得不做出一些改变,但这是一个很好的开始。
2021-04-27 17:45:56
不是 OP 要求的......如果 value="25.6" 那就是将显示的......它应该显示 "25.60"
2021-05-02 17:45:56
@Green 我在 Firefox 上,但我不能。然而,这是特定于浏览器实现的,最后,我相信您了解客户端和服务器端验证之间的区别我不确定downvote的真正含义,但感谢您的反馈。
2021-05-03 17:45:56
min这里没有意义。我可以轻松设置负值
2021-05-17 17:45:56

最后,我制作了一个 jQuery 插件,它将<input type="number" />为我适当地格式化我还注意到在某些移动设备上,minmax属性实际上并没有阻止您输入比指定的数字更低或更高的数字,因此插件也会考虑到这一点。下面是代码和示例:

(function($) {
  $.fn.currencyInput = function() {
    this.each(function() {
      var wrapper = $("<div class='currency-input' />");
      $(this).wrap(wrapper);
      $(this).before("<span class='currency-symbol'>$</span>");
      $(this).change(function() {
        var min = parseFloat($(this).attr("min"));
        var max = parseFloat($(this).attr("max"));
        var value = this.valueAsNumber;
        if(value < min)
          value = min;
        else if(value > max)
          value = max;
        $(this).val(value.toFixed(2)); 
      });
    });
  };
})(jQuery);

$(document).ready(function() {
  $('input.currency').currencyInput();
});
.currency {
  padding-left:12px;
}

.currency-symbol {
  position:absolute;
  padding: 2px 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="number" class="currency" min="0.01" max="2500.00" value="25.00" />

你们是完全正确的数字只能进入数字字段。我使用与已经列出的完全相同的东西,并在 span 标签上添加了一些 css 样式:

<span>$</span><input type="number" min="0.01" step="0.01" max="2500" value="25.67">

然后添加一些造型魔法:

span{
  position:relative;
  margin-right:-20px
}
input[type='number']{
  padding-left:20px;
  text-align:left;
}
……或者你可以只使用一个<label>标签,这在语义上也很有value(而且你不需要 JS)。
2021-04-28 17:45:56
这是一个简单的 javascript 问题。单击跨度上的事件以聚焦输入
2021-05-18 17:45:56
这很好很干净。唯一的问题是单击货币符号不会聚焦输入。
2021-05-21 17:45:56

似乎您需要两个字段,货币的选择列表和值的数字字段。

在这种情况下,常用的技术是使用 div 或 span 进行显示(屏幕外的表单字段),然后单击切换到表单元素进行编辑。

这是一个很多不是让用户键入的货币更好的选择。
2021-04-29 17:45:56
抱歉,这里给出的 jQuery 示例和 Dojo 中的 CurrencyTextBox 提供了比两个字段更用户友好的输入和验证方法。除了在移动设备上,因为您必须使用文本键盘。最大的讽刺是在我的 iPad 上,type="number" 包括我所在地区的货币符号,£。HTML 确实需要迎头赶上,并提供一些可以切换到适当键盘以获取货币的东西。
2021-05-03 17:45:56

当类型设置为“数字”时,浏览器仅允许数字输入。详情请看这里

您可以使用 type="text" 并使用 JavaScript 过滤掉除数字输入以外的任何其他内容,如此处所述