Element plus Form 表单验证执行两次,问题原因及解决办法

文章讲述了在使用this.$refs[form].validate进行表单验证时遇到的问题,当验证通过但后续请求出错,导致回调函数被调用两次,返回值分别为true和false。解决方案是改用validate的Promise形式,通过catch处理请求错误,避免回调函数的多次执行。这样可以确保在表单验证通过且无其他错误时才执行后续操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 问题原因

 this.$refs['form'].validate((res)=>{
     console.log(res);
     if(res){
         let elCrtUserid = localStorage.getItem('username')
         let elCrtUsername = localStorage.getItem('nickname')
         let elDptName = JSON.stringify(this.form.elDptName)
         addList({...this.form,elCrtUserid,elCrtUsername,elDptName,elDptId}).then(() => {
            this.$modal.msgSuccess('添加成功')
            this.open = false
            this.getList()
         })
     }
})

逻辑为利用回调函数获取验证结果,判断表单验证结果为true后,执行请求

结果请求没发送成功,于是我打印表单验证结果,结果控制台打印了两次,分别为truefalse

看了下源码,找到了问题所在

 问题根本原因为源码中try catch,加上我写的回调函数里面的请求报错,于是有了上面的true,false两次打印

解决办法

this.$refs['form'].validate().then(res=>{
    console.log(res)  
    let elCrtUserid = localStorage.getItem('username')
    let elCrtUsername = localStorage.getItem('nickname')
    let elDptName = JSON.stringify(this.form.elDptName)
    addList({...this.form,elCrtUserid,elCrtUsername,elDptName,elDptId}).then(() => {
        this.$modal.msgSuccess('添加成功')
        this.open = false
        this.getList()
    })
}).catch(e=>{
    console.log(e);
    //页面滚动到没通过验证的字段
    this.$refs.form.scrollToField(Object.keys(e)[0])
})

因为validate函数支持回调函数形式,也会返回一个Promise对象,而且catch还会返回没有通过的验证字段

总结

回调函数形式--->表单验证通过,函数执行报错  会执行两次回调函数,分别返回true、false

Promise形式---->表单验证通过,函数执行报错  执行then函数 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值