如何解决isNumberKey与truncateDecimals结合使用会导致输入字段出现异常舍入
正在发生的事情的视频:
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"
这可以防止错误的小数位数和浮点小数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。