autoNumeric在IE中无法识别数字键盘的逗号小数点输入问题
AutoNumeric在IE下数字键盘逗号无响应的问题:Bug确认与临时修复方案
嘿,我来帮你梳理这个问题:
首先,这绝对是AutoNumeric的一个IE兼容性Bug,非常值得提交给官方仓库。从你给出的键盘事件测试数据能看出来,Chrome和Firefox会把数字键盘逗号的keydown/keyup事件和常规键盘逗号的keypress事件统一处理,但IE在keydown阶段给数字键盘逗号返回的keyCode是110(对应字母n的键位),而AutoNumeric大概率只针对常规键盘逗号的keyCode(188)做了逻辑处理,没考虑到IE下数字键盘的这个特殊情况,导致输入被拦截了。
临时解决办法
这里有个直接可行的临时修复方案,通过手动监听输入框的keydown事件,专门处理IE下数字键盘逗号的情况:
// 替换成你的输入框选择器 const targetInput = document.querySelector('#your-input-id'); targetInput.addEventListener('keydown', function(e) { // 判断是否是IE环境,且按下的是数字键盘逗号(keyCode=110) const isIE = /*@cc_on!@*/false || !!document.documentMode; if (isIE && e.keyCode === 110) { e.preventDefault(); // 阻止默认的无响应行为 // 在光标位置插入逗号 const cursorStart = this.selectionStart; const cursorEnd = this.selectionEnd; const currentValue = this.value; this.value = currentValue.slice(0, cursorStart) + ',' + currentValue.slice(cursorEnd); // 调整光标到逗号后面 this.selectionStart = this.selectionEnd = cursorStart + 1; } });
这个方案的好处是只针对IE环境生效,不会干扰Chrome和Firefox的正常逻辑,而且直接模拟了逗号的输入行为,和常规键盘输入的体验一致。
另外,你也可以尝试在AutoNumeric初始化前,给它的内部keyCode映射添加110到逗号的关联,但这种方式需要修改插件源码或者扩展配置,不如事件监听来得灵活安全。
问题根源补充
从你提供的事件日志能看到,两种输入方式的keypress事件charCode都是44(逗号的ASCII码),说明字符本身是正确的,但AutoNumeric可能在keydown阶段做了键位校验,只允许188这个keyCode通过,IE下数字键盘逗号的110被当成了无效键,所以后续的输入被阻断了。
内容的提问来源于stack exchange,提问作者lofihelsinki
相关产品推荐
相关产品推荐

