项目使用vue+element开发,业务场景就是一个el-input输入框只能输入正整数

// 最开始想的比较简单(如下写法)
<el-form
      :rules="rules"
      :model="form"
    >
    <el-form-item label="账号" prop="account">
		<el-input v-model.number="form.account" />
	</el-form-item>
</el-form>

<script>
  export default {
  	data() {
      return {
        form: {
          account: ''
        },
        // 校验
        rules: {
          account: [{
                   required: true,
                   message: '请输入账号'
                 },
                 {
                   type: 'number',
                   message: '账号必须为数字值'
                 }]
                }
        	}
        }
}
</script>

后面是测试发现这个输入框的问题,当你输入的数字输到17位的时候,他会往前进一,输到17-22位中间一直显示0,输到22位直接显示(科学计数法)1.2345678901234568e+21 再继续输入就显示Infinity【此时account为null】,但是我们业务场景是有输入32位的,这种写法就不行了

// 改进了一下去掉了v-model.number上边的.number,改用oninput事件,用正则控制输入内容,发现v-model没有实时跟新,最后又加上了@blur="form.account=$event.target.value"

		<el-input
		v-model="form.account" 
		oninput="value=value.replace(/[^\d]/g,'')" 	@blur="form.account=$event.target.value"
		/>

        rules: {
          account: [{
                   required: true,
                   message: '请输入账号'
                 }]
                }

Logo

前往低代码交流专区

更多推荐