ElementUI 表单验证一直错误问题

验证失败:

在使用 Element-UI 时,按照官方实例编写表单验证规则,却总是验证失败。当点击提交时会发现,明明表单已经填写了,页面还是提示未填写;明明填写正确了,页面还是提示不正确。如下图:

屏幕截图 2020-12-23 180801

使用方法:

在 ElementUI 中,可以通过在 <el-form> 标签中将 rules 属性绑定 Vue 中自定义的规则数组,然后在 <el-form-item> 标签中使用 prop="xxx" 调用特定规则,实现表单验证的功能,代码如下:

<!-- 通过 :rules="diyRules" 绑定自定义的规则数组 -->
<el-form :model="form" :rules="diyRules" ref="ruleForm" label-width="100px">
  	<!-- 通过 prop="name" 调用规则数组里的 nameRule 规则 -->
    <el-form-item label="活动名称" prop="nameRule">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>

  <el-form-item label="活动形式" prop="descRule">
    <el-input type="textarea" v-model="ruleForm.desc"></el-input>
  </el-form-item>
    
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
  </el-form-item>
</el-form>

<script>
  export default {
    data() {
      return {
        form: {
          name: '',
          desc: ''
        },
        diyRules: { //自定义规则:
          nameRule: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          descRule: [
            { required: true, message: '请填写活动形式', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            // 向后台发送数据
          } else {
            console.log('表单验证失败!');
            return false;
          }
        });
      }
    }
  }
</script>

上面的列子中具体的操作大致如下:

  • 在 Vue 里面 return 了一个名叫 diyRules 的规则数组,数组里定义了 nameRule 和 descRule 两个规则。

  • 在 <el-form> 标签中使用 :rules="diyRules" 绑定该数组

  • 在 <el-form-item> 标签中使用 prop="nameRule" 调用数组里的 nameRule 规则

解决方法:

原来,prop 对应的不单单是 rules 规则里面的验证项,同时应该对应着我们 <el-form> 下的 model 绑定的值。prop绑定的类要与 <el-form> 的 model 绑定的值相对应。

而上列中 model 绑定的是 form 对象,form 里面有 name 和 desc 两个数据,所以自定义的规则的名字是不能随便取得,而要和 form 里的一样!

修改方法:将 diyRules 里的两个: nameRule、descRule 规则改名为 name、desc,保持和 form 里的值一样。

修改后的代码如下:

<!-- 通过 :rules="diyRules" 绑定自定义的规则数组 -->
<el-form :model="form" :rules="diyRules" ref="ruleForm" label-width="100px">
  	<!-- 通过 prop="name" 调用规则数组里的 name 规则 -->
    <el-form-item label="活动名称" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>

  <el-form-item label="活动形式" prop="desc">
    <el-input type="textarea" v-model="ruleForm.desc"></el-input>
  </el-form-item>
    
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
  </el-form-item>
</el-form>

<script>
  export default {
    data() {
      return {
        form: {
          name: '',
          desc: ''
        },
        diyRules: { //自定义规则:
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
          desc: [
            { required: true, message: '请填写活动形式', trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            // 向后台发送数据
          } else {
            console.log('表单验证失败!');
            return false;
          }
        });
      }
    }
  }
</script>

验证成功:

屏幕截图 2020-12-23 180844

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你可以使用 `el-input` 组件的 `rules` 属性来进行表单验证。以下是一个验证输入框只能输入正整数的示例: HTML 代码: ```html <template> <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="正整数"> <el-input v-model="form.number"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> ``` JavaScript 代码: ```js export default { data() { return { form: { number: '' }, rules: { number: [ { required: true, message: '请输入正整数', trigger: 'blur' }, { pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' } ] } } }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { // 表单验证通过,执行提交操作 } else { // 表单验证失败,提示错误信息 } }) } } } ``` 在上述代码中,我们使用 `rules` 属性来定义表单验证规则。`rules` 是一个对象,它的键是表单项的 `prop` 属性,值是一个数组,其中每个元素是一个验证规则对象。在这个例子中,我们为 `number` 表单项定义了两个验证规则: - `{ required: true, message: '请输入正整数', trigger: 'blur' }`,表示该表单项必填,且在失去焦点时进行验证; - `{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' }`,表示该表单项的值必须符合正整数的正则表达式,且在失去焦点时进行验证。 这样,我们就实现了一个表单验证输入框只能输入正整数的功能。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值