【问题标题】:Step not working for an input in HTML - the field is accepting any number of decimal places步骤不适用于 HTML 中的输入 - 该字段接受任意数量的小数位
【发布时间】:2020-09-06 17:26:32
【问题描述】:

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

<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 的小数位?

我应该做一个 if > 0.99 还是

【问题讨论】:

    标签: javascript input numbers decimal


    【解决方案1】:

    试试:

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

    【讨论】:

    • 注意我改为 Math.floor(),它会截断而不是舍入。这样,如果他们键入 123.456789,您的值就不会漂移
    • 另外,我没有看到这个,但它阻止了我的另一个 isNumberKey 的运行。你如何正确地将两个串在一起? onkeypress="return isNumberKey(event)" onkeyup="return isNumberKey(this, 2)"
    • 其他的怎么用?您可能需要 2 个功能。 onkeyup="return truncateDecimals(this, 2)"
    • 另一种是停止非数字键输入。
    • ` function isNumberKey(evt) { let charCode = (evt.which) ? evt.which : evt.keyCode; if (charCode > 31 && (charCode 57) && charCode != 46) 返回 false;返回真; } `
    猜你喜欢
    • 2022-12-23
    • 2021-02-24
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2020-10-06
    • 2016-11-03
    • 2017-05-22
    相关资源
    最近更新 更多