el-form 自定义校验规则失效之坑 elementUI

element el-form自定义校验
elementUI 说明了自定义校验 callback 必须被调用!
可我写着写着就漏了,如果你发现校验没有触发,也进不了校验,很可能就是没有调用callback。
有if判断都要加上else把调用callback,不然如果没进入if判断,就没法把callback调用了,同时也无法继续提交了。
callback:是每一次校验之后,也就是if语句后都会返回一个callback,将结果给了validate从而继续执行代码,否则validate会一直去等待callback的返回。

this.$refs.ruleForm.validate((valid) => {
这里都进不来
  if (valid) {
}

错误示范:

    var validUseBalance = (rule, value, callback) => {
      if (Number(this.ruleForm.useBalance) != 0 || Number(this.maxUseBalance) != 0) {
        if (Number(this.ruleForm.useBalance) > Number(this.maxUseBalance)) {
          callback(new Error('useBalance不可大于maxUseBalance'))
        }
        //错误代码
       callback()
      }
    }

正确示范:

    var validUseBalance = (rule, value, callback) => {
      if (Number(this.ruleForm.useBalance) != 0 || Number(this.maxUseBalance) != 0) {
        if (Number(this.ruleForm.useBalance) > Number(this.maxUseBalance)) {
          callback(new Error('useBalance不可大于maxUseBalance'))
        }
      } else {
        callback()
      }
    }

更简约的写法

/** 校验输入内容是否为正整数 */
const checkZhengShu = (rule, value, callback) => {
  let reg = new RegExp(/^[1-9]\d*$/);
  if (!value) return callback(new Error("请填入数值"));
  if (!reg.test(value))
    return callback(new Error("数值为整数,不可有小数点或特殊符号"));
  callback();
};
是的,el-form自定义校验规则required可以是动态的。你可以在自定义校验规则的函数中,根据需要动态地返回校验规则的结果。例如,你可以根据表单中其他字段的值来判断某个字段是否为必填项。具体的实现方式可以参考以下代码: ```javascript // 定义一个动态的required校验规则 const dynamicRequired = (otherFieldValue) => { return (rule, value, callback) => { if (otherFieldValue === 'something') { // 如果满足某个条件,则该字段为必填项 if (!value) { callback(new Error('该字段为必填项')) } else { callback() } } else { // 如果不满足条件,则该字段不需要校验必填项 callback() } } } // 在表单中使用动态的required校验规则 <el-form ref="form" :model="form"> <el-form-item label="其他字段"> <el-select v-model="form.otherField"> <el-option label="条件1" value="something"></el-option> <el-option label="条件2" value="something else"></el-option> </el-select> </el-form-item> <el-form-item label="需要校验必填项的字段"> <el-input v-model="form.requiredField"></el-input> <el-form-item label="是否必填"> <el-switch v-model="form.required"></el-switch> </el-form-item> </el-form-item> </el-form> // 在代码中动态设置required校验规则 this.$refs.form.validateField('requiredField', (errorMessage) => { if (errorMessage) { // 校验失败,需要显示错误提示 this.$message.error(errorMessage) } else { // 校验成功,可以提交表单 this.submitForm() } }, { required: dynamicRequired(this.form.otherField) }) ``` 在上面的代码中,我们定义了一个动态的required校验规则`dynamicRequired`,它接受一个其他字段的值作为参数,返回一个校验函数。在校验函数中,我们根据其他字段的值来判断该字段是否为必填项,如果满足条件,则需要校验必填项,否则不需要校验。在表单中,我们使用了一个开关来控制该字段是否为必填项,当开关关闭时,该字段不需要进行校验。在代码中,我们通过调用`validateField`方法来对该字段进行校验,同时动态地设置了required校验规则。这样,我们就实现了一个动态的required校验规则
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值