步骤不适用于HTML中的输入-该字段接受任意数量的小数位

问题描述

我使用的是简单的数字输入,并且我删除了微调器,以便用户可以输入自己的数字。完整的输入代码是:

<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;
 }