问题描述
正在发生的事情的视频:
https://gyazo.com/d87f148bca1e59440382de8a63c83695
输入10.2,然后截断似乎可以立即将其四舍五入到10.19。我正在使用此代码作为输入:
<input type="number" name="inputVeLocity" onkeypress="return isNumberKey(event)" onkeyup="return truncateDecimals(this,2)" id="initialVeLocity" class="reset_form" value="10" step="0.01" required>
我尝试删除步骤和值数字,但这并没有解决问题。因此问题可能出在脚本内:
function isNumberKey(evt) {
let charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46) {
evt.preventDefault();
return false;
}
return true;
}
function truncateDecimals(obj,decimals) {
if (obj.value % Math.round(obj.value)) {
let divisor = Math.pow(10,decimals);
obj.value = Math.floor(obj.value * divisor) / divisor;
}
console.log(obj.value);
return true;
}
感谢您的帮助。这已经困扰了几天了。
解决方法
我有一个解决此问题的答案:
删除truncateDecimals函数并替换为:
let validate = function(e) {
let t = e.value;
e.value = (t.indexOf(".") >= 0) ? (t.substr(0,t.indexOf(".")) + t.substr(t.indexOf("."),3)) : t;
}
将onkeyup="return truncateDecimals(this,2)"
替换为:
oninput="validate(this)"
并将type="number"
替换为:
type="text"
这可以防止错误的小数位数和浮点小数。