You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数字输入框输入小数点后未补全小数,300ms后被清空的问题求解

解决数字输入框中"123."这类值被误判为空的问题

问题原因

parseFloat("123.")会返回NaN,触发原有逻辑中的isNaN判断,导致输入值被清空。要解决这个问题,只需调整输入值的处理逻辑,把末尾带小数点的情况视为有效输入。

简便解决方案

这里提供两种直接可行的方案:

方案一:自动补全末尾小数点后的0

对以小数点结尾的输入值自动添加一个0,让parseFloat能正确识别为有效数字,同时不影响用户后续输入(用户继续输入小数位时,补的0会被覆盖):

function delay(callback, ms) {
    var timer = 0;
    return function () {
        var context = this, args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            callback.apply(context, args);
        }, ms || 0);
    };
}

$('#test').on('input', delay(function () {
    var el = $(this);
    var value = el.val();
    
    // 处理末尾带小数点的情况
    if (value && value.endsWith('.')) {
        value += '0';
    }
    
    var num = parseFloat(value);
    if (isNaN(num) || num <= 0) {
      value = '';
    }
   
    el.val(value);
}, 300));

方案二:用正则直接验证格式

通过正则表达式判断输入是否符合数字格式(包括整数、带小数、末尾带小数点的情况),避免依赖parseFloat的返回值:

function delay(callback, ms) {
    var timer = 0;
    return function () {
        var context = this, args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            callback.apply(context, args);
        }, ms || 0);
    };
}

$('#test').on('input', delay(function () {
    var el = $(this);
    var value = el.val();
    var isValid = false;
    
    // 正则验证:支持整数、小数、末尾带小数点的情况
    if (value) {
        isValid = /^\d+(\.\d*)?$|^\.\d+$/.test(value);
    }
    
    var num = parseFloat(value);
    if (!isValid || (num <= 0 && !isNaN(num))) {
      value = '';
    }
   
    el.val(value);
}, 300));

对应HTML代码(无需修改)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<input type="number" id="test" value="" min="0" step="0.01">

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:29