前端:(火狐浏览器兼容) input type ="number",输入英文字母的问题

输入框设置只能输入数字,一般浏览器都正常识别number,不过能输入e,因为 e在数学上代表2.71828

1、有的人这么解决:

<input type='number' οnkeypress='return( /[\d]/.test(String.fromCharCode(event.keyCode) ) )' />


2、由于火狐里面没有 input type ="number" 这个设置,所以可以随机输入英文,

看了其他的文章用了第一个方法,火狐居然出现无法输入,无法删除的问题.....

那么换一个方法,还是用正则:(设置 text类型,却只能输入数字,字母会自动删除

<input  type="text" οnkeyup="this.value=this.value.replace(/[^\d]/g,'');"  >

开发中有很多坑,需要耐心解决

### 解决方案 对于火狐浏览器中 `el-input-number` 组件可以输入字母的问题,在其他主流浏览器可能不会遇到此情况,但在 Firefox 中确实存在该现象。为了防止用户在 `el-input-number` 输入框内输入非数值字符,可以通过监听键盘事件并阻止非法键入来实现[^1]。 下面是一个基于 Vue.js 的解决方案: ```vue <template> <div> <!-- 使用自定义指令 v-onlyNumber --> <el-input-number v-model="num" v-onlyNumber></el-input-number> </div> </template> <script> export default { data() { return { num: null, }; }, directives: { onlyNumber: { bind(el) { function handleInput(event) { const keyCode = event.keyCode; // 判断按键是否为数字(48-57),小键盘数字(96-105), Backspace, Delete, ArrowLeft, ArrowRight if ( (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || [8, 46, 37, 39].includes(keyCode) ) { return true; // 允许操作 } else { event.preventDefault(); // 阻止默认行为 } } el.onkeydown = handleInput; // 清除绑定的事件处理器 el._vOnlyNumberOldOninput = el.oninput; el.oninput = () => { let value = el.value.replace(/[^\d]/g, ''); el.value = value; if (typeof el._vOnlyNumberOldOninput === 'function') { el._vOnlyNumberOldOninput(); } }; }, }, }, }; </script> ``` 通过上述方法可以在不改变原有逻辑的情况下有效拦截非数字字符的录入,并确保即使用户尝试粘贴或拖拽文本到输入框时也能保持数据的有效性[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值