问题描述
我使用的是简单的数字输入,并且我删除了微调器,以便用户可以输入自己的数字。完整的输入代码是:
<input type="number" onkeypress="return isNumberKey(event)" id="userInputMapOne" class="form-control" min="0" step="0.01" aria-label="input value for your zone">
但是我发现用户可以输入比0.01步数更多的小数位数。真烦人在页面的另一部分,step属性可以完美工作。此特定代码的唯一区别是,我使用的是引导程序前缀表格。否则没有区别。
输入将值发送给JavaScript函数,但是如果该函数将输入限制为两位小数,那就太好了。
我应该为JS使用什么代码以不接受大于2 d.p的小数位?
如果> 0.99或
解决方法
尝试:
<input type="number" onkeyup="return isNumberKey(this,2)" id="userInputMapOne" class="form-control" min="0" step="0.01" aria-label="input value for your zone">
function isNumberKey(obj,decimals) {
if (obj.value % Math.round(obj.value)) {
var divisor = Math.pow(10,decimals);
obj.value = Math.floor(obj.value * divisor)/divisor;
}
console.log(obj.value);
}
注意:
我使用了onkeyup
,这是您要更改它的时间。
编辑:
如果您还需要仅检查数字:
<input type="number" onkeypress="return isNumberKey(event)" onkeyup="return truncateDecimals(this,4)" id="userInputMapOne" class="form-control" min="0" step="0.01" aria-label="input value for your zone">
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)) {
var divisor = Math.pow(10,decimals);
obj.value = Math.floor(obj.value * divisor)/divisor;
}
console.log(obj.value);
return true;
}