JavaScript限制两位小数输入功能在输入多个小数零时失效求修复
原代码的问题出在用数值相等来判断合法性——当输入100.000000000这类末尾带多个零的数值时,它的实际数值和100或100.00完全相等,导致原判断条件不触发,没法限制小数位数。
这里给你两种修复方案:
方案一:精准限制小数位数(恢复上一次合法值)
直接检查输入字符串的小数部分长度,一旦超过两位就恢复到上一次的合法输入:
function restrict(tis) { const prev = tis.getAttribute("data-prev") || ""; const currentValue = tis.value.trim(); if (!currentValue) { tis.setAttribute("data-prev", ""); return; } const dotIndex = currentValue.indexOf("."); // 存在小数点且小数部分长度超过2位时,恢复上一次值 if (dotIndex !== -1 && currentValue.length - dotIndex - 1 > 2) { tis.value = prev; } else { tis.setAttribute("data-prev", currentValue); } }
<input type="number" name="amount" step="any" oninput="restrict(this);" required>
方案二:自动格式化输入(实时修正为两位小数)
如果希望输入后自动修正为合法格式,不需要手动删除多余零,可以用这种方式,输入100.000000会直接变成100.00:
function restrict(tis) { let value = tis.value.trim(); if (!value) { tis.setAttribute("data-prev", ""); return; } const num = parseFloat(value); if (!isNaN(num)) { // 保留两位小数,自动格式化 tis.value = num.toFixed(2); // 如果你希望100.00显示为100,可以替换成下面这行 // tis.value = (Math.round(num * 100) / 100).toString(); } tis.setAttribute("data-prev", tis.value); }
<input type="number" name="amount" step="any" oninput="restrict(this);" required>
内容的提问来源于stack exchange,提问作者elliot
相关产品推荐
相关产品推荐

