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

Step not working for an input in HTML - the field is accepting any number of decimal places

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

<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 属性完美运行。此特定代码的唯一区别是我使用的是 bootstrap 前置形式。否则没有区别。

输入将值发送到 JavaScript 函数,但如果该函数将输入限制为小数点后两位就好了。

我应该使用什么代码让 JS 不接受任何超过 2 位的小数位 d.p?

我应该做一个 if > 0.99 还是 < 0.00 ?小数点也得有JS代码吧?

尝试:

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