vue+element输入框校验输入汉字再输入数字看似正常,实则有大问题,保存时数据不对
在vue+element UI 项目中经常会使用到输入框限制为整数或者小数的需求,一般采用如下oninput="value=value.replace(/[^0-9.]/g,'')"解决,
<el-input
:placeholder="请输入整数或者小数"
v-model="inputValue"
oninput="value=value.replace(/[^0-9.]/g,'')"
></el-input>
你会发现,当你输入汉字时,确实没有显示上去,再输入数字能正常显示,但是,问题来了,你保存的时候却不是你输入的,通常是0,这样不细心检查还查不出来,到时候出问题了还以为是数据出错。
以下解决方案:
该问题是由于 oninput
方法限制了输入框中输入的字符,只允许数字(0-9)和小点号(.)的输入。当输入非法字符(如汉字)时,value.replace(/[^0-9.]/g,'')
会将其替换为空字符串,因此输入框不会显示该字符。
如果您想要在保存数据时获取到输入框中输入的文本内容,可以使用 v-model
来双向绑定数据,并将 oninput="value=value.replace(/[^0-9.]/g,'')"
改为 input 事件监听器:
<template>
<el-input v-model="inputValue" @input="handleInput"></el-input>
</template>
<script>
export default {
data() {
return {
inputValue: ''
}
},
methods: {
handleInput(val) {
// 过滤非法字符
this.inputValue = val.replace(/[^0-9.]/g, '')
},
saveData() {
// 在此处使用 this.inputValue 来保存输入框中的数据
}
}
}
</script>
在上述代码中,我们使用 @input
添加了一个 input 事件监听器,并在 methods
中定义了处理该事件的方法 handleInput
。在该方法中,我们通过正则表达式过滤非法字符,并用赋值运算符来更新 inputValue
的值。在 saveData()
方法中,我们可以直接使用 this.inputValue
来获取输入框中的值,并进行保存。这样就可以实现即使不输入汉字也能保存该字段的值。
希望这个示例对您有所帮助。
长风破浪会有时,直挂云帆济沧海
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现