表单在validateUsername函数之前提交时遇到问题,有机会在服务器端完成用户名检查。
仅在validateUsername函数完成后才如何提交表单?希望这很清楚…
form.submit(function(){ if (validateUsername() & validateEmail() & validatePassword()) { return true; } else { return false; } }); function validateUsername(){ usernameInfo.addClass("sign_up_drill"); usernameInfo.text("checking..."); var b = username.val(); var filter = /^[a-zA-Z0-9_]+$/; $.post("../username_check.php",{su_username:username.val()},function(data) { if (data=='yes') { username.addClass("error"); usernameInfo.text("sorry, that one's taken"); usernameInfo.addClass("error"); return false; } else if (!filter.test(b)) { username.addClass("error"); usernameInfo.text("no funny characters please"); usernameInfo.addClass("error"); return false; } else { username.removeClass("error"); usernameInfo.text("ok"); usernameInfo.removeClass("error"); return true; } }); }
Olafur答案的更详细的版本-进行AJAX调用,函数无需等待就返回。
提交表单之前,回调不会结束。
您应该做的是让按钮/触发调用AJAX验证,并且回调应该提交表单而不是返回true。