Vue.js + javaScript 如何限制input标签数字框输入

130 阅读1分钟

先上无加el-input

<template>
  <el-input v-model="input" placeholder="Please input" />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const input = ref('')
</script>

比较多用的方法是通过输入框的onkeyup时间和onafterpaste来进行数据过滤,而实现方法如下

<template>
  <el-input
      v-model="input" 
      placeholder="Please input"
      onkeyup="this.value=this.value.replace(/\D/g,'')"
      onafterpaste="this.value=this.value.replace(/\D/g,'')"
  />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const input = ref('')
</script>
这样可以接解决数字限制问题,但是有一个非常严重的问题,如果光标在input中,此时进入中英文切换时,聚焦状态和数据双向绑定都会失效

解决方案:通过监听input标签中的@input事件进行监听并重新对绑定数值赋值,便可解决上述问题

<template>
  <el-input
      v-model="input"
      placeholder="Please input"
      @input="(val) => {
            return filterNumber(val)
        }"
  />
</template>
<script lang="ts" setup>
import { ref } from 'vue'
const input = ref('')

// 过滤除数字外其他字符串
// 如果想去掉开头0,可多增加判断条件等
const filterNumber = (val: string) => {
   input.value = val.replace(/\D/g, '')
}

</script>