You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中Vue配合Axios使用e.preventDefault失效问题咨询

故障原因

问题核心和e变量的作用域无关,本质是axios是异步IO操作:调用axios.get()之后,浏览器不会等接口返回结果再执行后续逻辑,会直接走完checkAvailability函数,触发默认的表单提交行为。等接口请求完成进入then回调时,表单早已提交完毕,此时再调用e.preventDefault()完全不生效。

修复方案
  • 先放开被注释的e.preventDefault(),所有场景下先阻止表单默认提交行为,整体提交流程交给自己控制
  • 在axios的回调中判断校验结果,如果校验通过(错误数组为空),手动触发表单提交即可
优化后的代码示例
checkAvailability(e){
    // 所有场景先阻止默认表单提交
    e.preventDefault();
    let date = document.getElementById('date').value;
    let errorList = document.getElementById('errors');
    // 提前获取表单DOM,建议给form标签加ref="bookingForm"属性
    const submitForm = this.$refs.bookingForm;

    date = date.split('-').reverse().join('-');

    axios.get('/materials/check-availability', {
        params: {
            date: date,
            time: this.time,
            ek: this.ekNumber,
            dk: this.dkNumber,
            ck: this.ckNumber,
            zv: this.zvNumber,
            ton: this.tonNumber
        }
    })
    // 用箭头函数保留Vue实例的this指向
    .then((response) => {
        let errors = response.data;
        if(errors.length > 0)
        {
            errorList.innerHTML = '';
            for(let i = 0; i < errors.length; i++)
            {
                let li = document.createElement('li');
                li.innerText = errors[i];
                errorList.appendChild(li);
            }
            errorModal.show();
        } else {
            // 校验通过,手动提交表单
            submitForm.submit();
        }
    })
    .catch(function(error){
        console.log(error);
    });
}

内容的提问来源于stack exchange,提问作者Pieter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:18:03