el-input数字类型禁止+-符号输入

使用 el-input 的数字类型输入时,会默认开放-+e符号输入,且无法通过onInput进行拦截。

html 复制代码
<el-input
    v-model="input"
    type="number"
    placeholder="请输入内容"
    @input="onInput"
></el-input>
js 复制代码
function onInput (value) {
    const val = value.toString().replace(/[^\d/.]/g, '');
    input.value = val
}

以上方法无法正确响应,原因有二:

  1. number类型将 -+e 识别为数字符号,不做限制,且符号的输入不会精确触发input响应;
  2. 首次接收到 -+e 输入后,返回剔除掉的文本回显,无法正确显示,原生input会内部转义,导致无法即显。

方案

可监听原生input方法,即可规避问题1;回显赋值时,同时更改原生inputvalue值,即可。 需要注意的是,该方案依赖Event中的属性data,对于兼容性要求高的场景,需谨慎处理。

html 复制代码
<el-input
    v-model="input"
    type="number"
    placeholder="请输入内容"
    @input.native="onInput"
></el-input>
js 复制代码
function onInput (e) {
    const target = e.target;
    const value = target.value;
  
    if( [ '-', '+', 'e' ].includes(e.data) ) {
        target.value = offset.value[key] + '';
    }
    const val = value.toString().replace(/[^\d/.]/g, '');
    input.value = val
}
相关推荐
英勇无比的消炎药44 分钟前
Vue 工程接入 WebMCP SDK 最佳实践:从零构建智能前端应用
vue.js
无人生还1 小时前
从 Vue3 到 React · 快速上手系列第 7 篇:副作用与生命周期 —— watch/watchEffect 如何翻译为 useEffect
前端·vue.js·react.js
仿生狮子10 小时前
✂️ Nuxt 最简单的字体裁剪工具:Fontize
javascript·vue.js·nuxt.js
别惊醒渔人15 小时前
Vue3 Diff 优化:最长递增子序列 LIS
前端·javascript·vue.js
用户831348593069819 小时前
Vue+Three.js实现PCB电路板3D交互:元器件点击高亮、部件显隐、模型自动旋转
vue.js·webgl·three.js
GitLqr21 小时前
提升 Web 开发效率:我常用的 10 个 TypeScript 实战技巧
vue.js·react.js·typescript
AI_paid_community1 天前
机械研发人员如何使用 Claude?
java·vue.js
cdcdhj1 天前
vue3中的watchEffect()监听,什么时候监听,什么时候清理,什么时候停止
前端·javascript·vue.js
无人生还1 天前
从 Vue3 到 React · 快速上手系列第 6 篇:状态管理 useState 与 useReducer
前端·vue.js·react.js
林间码客1 天前
全栈视角下的 Mock 指南:从后端单元测试到前端 Vue 3 联调
前端·vue.js·单元测试