如何正确引入需在项目全局使用的JavaScript文件?
限制输入为十进制数字的jQuery解决方案
我看你正在实现一个给项目中输入框限制十进制数字输入的功能,这段代码的核心是只允许输入数字和单个小数点(支持.或,作为分隔符),我帮你补全并优化了代码,同时拆解下每个部分的作用:
完整可运行代码
$('.decimal').each(function () { $(this).keypress(function (e) { // 兼容不同浏览器的event对象 const event = e || window.event; const charCode = event.which || event.keyCode; const inputVal = $(this).val(); // 核心判断:禁止非数字、重复小数点的输入 if ( // 如果是小数点,但输入框已有同类型小数点,阻止输入 ((charCode === 46 && inputVal.indexOf('.') !== -1) || (charCode === 44 && inputVal.indexOf(',') !== -1)) && // 同时按键不是0-9的数字键(ASCII码48-57) (charCode < 48 || charCode > 57) ) { event.preventDefault(); } // 补充:确保输入框最多只有一个小数点(不管是.还是,) else if (charCode === 46 || charCode === 44) { const decimalCount = inputVal.replace(/[^.,]/g, "").length; if (decimalCount >= 1) { event.preventDefault(); } } }); });
代码细节解释
$('.decimal')选择器:给项目中所有带有decimal类的输入框绑定输入限制逻辑keypress事件监听:在字符插入输入框前拦截判断,避免无效内容进入输入框- 事件对象兼容:处理不同浏览器对
event对象的差异,确保能正确获取按键编码 - 核心拦截规则:
- 禁止重复输入相同类型的小数点(比如已经有
.就不能再输入.) - 禁止输入数字、小数点之外的任意字符
- 确保整个输入框内最多只能存在一个小数点(不管是
.还是,)
- 禁止重复输入相同类型的小数点(比如已经有
实用优化建议
- 增加粘贴拦截:防止用户粘贴不符合规则的内容
$('.decimal').on('paste', function(e) { const clipboardData = e.originalEvent.clipboardData || window.clipboardData; const pastedText = clipboardData.getData('text'); // 验证粘贴内容是否为合法十进制格式 const validDecimal = /^\d*[.,]?\d*$/; if (!validDecimal.test(pastedText)) { e.preventDefault(); } });
- 统一小数点格式:方便后续业务处理(比如统一转成
.)
$('.decimal').on('blur', function() { const currentVal = $(this).val(); $(this).val(currentVal.replace(',', '.')); });
内容的提问来源于stack exchange,提问作者Juan Salvador Portugal
相关产品推荐
相关产品推荐

