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

Django支付表单无法正常提交:error值始终不为0求助

问题描述

我在Django中构建支付/结账表单时碰到了麻烦:用户没填完信息就会卡在结账环节。我猜问题出在error值一直不等于0,但这和预期不符。

以下是有问题的代码:

var form = document.getElementById('form')

form.addEventListener('submit', function(e) {
    e.preventDefault()
})

document.getElementById('make-payment').addEventListener('click', function(e){
    const form = document.getElementById('form')

    let error = formValidate(form);

    if (error != 0) {
        alert('smth typed in')
    }
    else {
        submitFormData()
    }
})

function formValidate(form) {
    var error = 0;
    let formReq = document.querySelectorAll('._req');

    for (let index = 0; index < formReq.length; index++) {
        const input = formReq[index]
        formRemoveError(input);

        if (input.classList.contains('_email')) {
            if (emailTest(input)) {
                formAddError(input);
                error++;
            }
        }
        else {
            if (input.value === '') {
                formAddError(input);
                error++;
            }
        }

    }
}
function formAddError(input) {
    input.parentElement.classList.add('_error')
    input.classList.add('_error');
}
function formRemoveError(input) {
    input.parentElement.classList.remove('_error')
    input.classList.remove('_error');
}
function emailTest(input) {
    return !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,8})+$/.test(input.value);
}
问题根源

你的formValidate函数没有返回计算好的error值。函数内部虽然统计了错误数量,但最后没写return error把结果传回去,导致let error = formValidate(form)这行里的error是undefined。而undefined != 0永远为真,所以不管表单填没填对,都会弹出提示,永远走不到提交表单的逻辑。

修复方案

在formValidate函数末尾加上return error;,让函数返回错误统计数:

function formValidate(form) {
    var error = 0;
    let formReq = document.querySelectorAll('._req');

    for (let index = 0; index < formReq.length; index++) {
        const input = formReq[index]
        formRemoveError(input);

        if (input.classList.contains('_email')) {
            if (emailTest(input)) {
                formAddError(input);
                error++;
            }
        }
        else {
            if (input.value === '') {
                formAddError(input);
                error++;
            }
        }

    }
    // 返回错误数量
    return error;
}

另外,原代码里的alert('smth typed in')提示太模糊,建议改成alert('请补全必填信息或修正错误'),用户能更清楚知道哪里出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:26:03