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
相关产品推荐
相关产品推荐

