我正在制作一个表单,用户可以使用HTML数字输入标签输入美元金额。有没有办法让输入框始终显示2个小数位?
我正在制作一个表单,用户可以使用HTML数字输入标签输入美元金额。有没有办法让输入框始终显示2个小数位?
所以如果有人偶然发现这个问题,这里提供了一个JavaScript的解决方案:
步骤 1:将您的HTML数字输入框与onchange
事件连接起来。
myHTMLNumberInput.onchange = setTwoNumberDecimal;
或者如果您愿意,可以在HTML代码中进行编辑。
<input type="number" onchange="setTwoNumberDecimal" min="0" max="10" step="0.25" value="0.00" />
步骤2:编写setTwoDecimalPlace方法
function setTwoNumberDecimal(event) {
this.value = parseFloat(this.value).toFixed(2);
}
如果您愿意,可以通过更改 toFixed
中的“2”来获得更多或更少的小数位。
一种内联解决方案将Groot和Ivaylo的建议以以下格式组合:
onchange="(function(el){el.value=parseFloat(el.value).toFixed(2);})(this)"
//limit number input decimal places to two
$(':input[type="number"]').change(function(){
this.value = parseFloat(this.value).toFixed(2);
});
:input[type="number"].with-cents
)。 - Jacopo Pace其他人在这里发布的大部分都有效,但是当我多次在同一方向上使用箭头更改数字时,使用onchange
无法正常工作。有效的方法是使用oninput
。我的代码(主要借鉴于MC9000):
HTML
<input class="form-control" oninput="setTwoNumberDecimal(this)" step="0.01" value="0.00" type="number" name="item[amount]" id="item_amount">
JS
function setTwoNumberDecimal(el) {
el.value = parseFloat(el.value).toFixed(2);
};
onchange="setTwoNumberDecimal(this)"
function setTwoNumberDecimal(el) {
el.value = parseFloat(el.value).toFixed(2);
};
您可以使用Telerik的numerictextbox
实现许多功能:
<input id="account_rate" data-role="numerictextbox" data-format="#.00" data-min="0.01" data-max="100" data-decimals="2" data-spinners="false" data-bind="value: account_rate_value" onchange="APP.models.rates.buttons_state(true);" />
纯 HTML 无法实现您所需的功能。我的建议是编写一个简单的 JavaScript 函数来为您完成四舍五入。
input
事件而不是被接受的方法中的 change
,但是发现无论如何删除字符都没有得到正确处理。if (e.inputType == "deleteContentBackward") {
return;
}
blur
事件并将相同的回调函数附加到它上面。
我最终得出了这个解决方案:
const setTwoNumberDecimal = (el) => {
el.value = parseFloat(el.value).toFixed(2);
};
const handleInput = (e) => {
if (e.inputType == "deleteContentBackward") {
return;
}
setTwoNumberDecimal(e.target);
};
const handleBlur = (e) => {
if (e.target.value !== "") {
setTwoNumberDecimal(e.target);
}
};
myHTMLNumberInput.addEventListener("input", handleInput);
myHTMLNumberInput.addEventListener("blur", handleBlur);
<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.min.js" integrity="sha512-pHVGpX7F/27yZ0ISY+VVjyULApbDlD0/X0rgGbTqCE7WFW5MezNTWG/dnhtbBuICzsd0WQPgpE4REBLv+UqChw==" crossorigin="anonymous"></script>
<input type="text" class = 'item_price' name="price" min="1.00" placeholder="Enter Price" value="{{ old('price') }}" step="">
<script>
$(document).ready(function() {
$('.item_price').mask('00000.00', { reverse: true });
});
</script>
给出的是99999.99