1

问题:当已经输入数字的时候,还触发了为空的校验,预期是已经输入年龄的时候不会校验,输入框没有值的时候才会触发校验的。

在网上查找了资料,el-input-number组件输入数字的时候无法实时触发change事件,需要使用@input.native来触发,一开始使用了也没有效果,后来加了this.$nextTick功能实现了。

        // 解决el-input-number组件输入数字的时候无法实时触发change事件
        validateNumber(value) {
          this.$nextTick(() => {
            if (value != undefined) {
              this.$refs.numberValidateForm.clearValidate("age");
            }
          })
        },

实现功能的效果:

完整代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>vue开发:解决el-input-number组件输入数字的时候无法实时触发change事件</title>
  <!--引入 element-ui 的样式,-->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  <!-- 引入element 的组件库-->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    #app {
      padding: 50px;
    }
  </style>
</head>

<body>
  <div id="app">
    <el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" :rules="rules">
      <el-form-item label="姓名" prop="name">
        <el-input v-model="numberValidateForm.name"></el-input>
      </el-form-item>
      <el-form-item label="年龄" prop="age">
        <el-input-number :min="0" controls-position="right" placeholder="请输入正整数" v-model.number="numberValidateForm.age"
          @input.native="validateNumber"></el-input-number>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm('numberValidateForm')">提交</el-button>
        <el-button @click="resetForm('numberValidateForm')">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          numberValidateForm: {},
          rules: {
            name: [
              { required: true, message: '姓名不能为空', trigger: "change" },
            ],
            age: [
              { required: true, message: '年龄不能为空', trigger: "change" },
            ]
          }
        }
      },
      created() {

      },
      methods: {
        // 解决el-input-number组件输入数字的时候无法实时触发change事件
        validateNumber(value) {
          this.$nextTick(() => {
            if (value != undefined) {
              this.$refs.numberValidateForm.clearValidate("age");
            }
          })
        },

        submitForm(formName) {
          this.$refs[formName].validate((valid) => {
            if (valid) {
              console.log(this.numberValidateForm, '表单结果');
            } else {
              console.log('error submit!!');
              return false;
            }
          });
        },
        resetForm(formName) {
          this.$refs[formName].resetFields();
        }
      }
    })
  </script>
</body>

</html>

我的一个道姑朋友
80 声望4 粉丝

星光不问赶路人,岁月不负有心人。