elementui+vue2 input输入框限制只能输入数字

方法1

自定义表单校验

javascript 复制代码
<el-form :model="Formdata" ref="formRef" :rules="nodeFormRules" label-width="100px">
	<el-form-item
	    label="年龄"
	    prop="age"
	  >
	    <el-input v-model.number="Formdata.age"></el-input>
	  </el-form-item>
</el-form>
javascript 复制代码
data() {
	var checkNumber = (rule, value, callback) => {
	   // if (!value) {
	   //   return callback(new Error('年龄不能为空'));
	   // }
	   if (value && !Number.isInteger(value)) {
	     callback(new Error("请输入数字值"));
	   } else {
	     callback();
	   }
	 };
	 return{
	  nodeFormRules: {
        age: [{ validator: checkNumber, trigger: "blur" }],
      }
	}
}

方法2

只要给el-form标签加上proprules属性就可以了

javascript 复制代码
<el-form :model="Formdata" ref="formRef" label-width="100px">
	<el-form-item
	    label="年龄"
	    prop="age"
	    :rules="[
	      { required: true, message: '年龄不能为空'},
	      { type: 'number', message: '年龄必须为数字值'}
	    ]"
	  >
	    <el-input v-model.number="Formdata.age"></el-input>
	  </el-form-item>
</el-form>

注意:

el-form标签的prop属性的值必须得和input框v-model绑定的值一致,否则校验无效

其他问题

一打开表单 还没开始输入数据 表单的校验就自动触发了

这就导致我的空表单出现了校验错误

解决

在表单页面mounted中 或者 打开表单页面之前 移除表单项的校验结果,即在对应位置加上如下代码:

javascript 复制代码
this.$nextTick(() => {
  setTimeout(() => {
    this.$refs.formRef.clearValidate(); // 移除表单项的校验结果
  }, 10);
});

补充

javascript 复制代码
<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="密码" prop="pass">
    <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="确认密码" prop="checkPass">
    <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="年龄" prop="age">
    <el-input v-model.number="ruleForm.age"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>
<script>
  export default {
    data() {
      var checkAge = (rule, value, callback) => {
        if (!value) {
          return callback(new Error('年龄不能为空'));
        }
        setTimeout(() => {
          if (!Number.isInteger(value)) {
            callback(new Error('请输入数字值'));
          } else {
            if (value < 18) {
              callback(new Error('必须年满18岁'));
            } else {
              callback();
            }
          }
        }, 1000);
      };
      var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass');
          }
          callback();
        }
      };
      var validatePass2 = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'));
        } else if (value !== this.ruleForm.pass) {
          callback(new Error('两次输入密码不一致!'));
        } else {
          callback();
        }
      };
      return {
        ruleForm: {
          pass: '',
          checkPass: '',
          age: ''
        },
        rules: {
          pass: [
            { validator: validatePass, trigger: 'blur' }
          ],
          checkPass: [
            { validator: validatePass2, trigger: 'blur' }
          ],
          age: [
            { validator: checkAge, trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>
相关推荐
朝阳58137 分钟前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路1 小时前
GeoTools 读取影像元数据
前端
ssshooter1 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry2 小时前
Jetpack Compose 中的状态
前端
dae bal3 小时前
关于RSA和AES加密
前端·vue.js
柳杉3 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化
lynn8570_blog3 小时前
低端设备加载webp ANR
前端·算法
LKAI.3 小时前
传统方式部署(RuoYi-Cloud)微服务
java·linux·前端·后端·微服务·node.js·ruoyi
刺客-Andy4 小时前
React 第七十节 Router中matchRoutes的使用详解及注意事项
前端·javascript·react.js
前端工作日常4 小时前
我对eslint的进一步学习
前端·eslint