1

我正在验证注册页面上的表单,一切正常,除了电子邮件验证有点命中注定。

如果我只是验证它以确保它是一个实际的电子邮件地址,它就可以正常工作,但是当我尝试添加一个检查以查看它是否也在使用中时,我遇到了问题。

验证本身工作正常,但表单一旦验证且未使用就不会提交。

这有效,并且表单提交:

if(filter.test(a)){
        email.removeClass("field_error");
        emailInfo.text("");
        emailInfo.removeClass("error");
        return true;
    }

这有效,但表单不提交:

if(filter.test(a)){
        $.post('php/availability.php',{email: $('#email').val()}, function(emaildata){
            if(emaildata.exists){
                email.addClass("field_error");
                emailInfo.text("(Email address in use)");
                emailInfo.addClass("error");
            } else {
                email.removeClass("field_error");
                emailInfo.text("");
                emailInfo.removeClass("error");
                return true;
            }
        }, 'JSON');
    }

我难住了。

4

1 回答 1

1

问题与 AJAX 调用(第一个“A”)的异步特性有关。

在您的第一个示例中,您陷入困境if并立即返回true,我假设这允许您提交表单。

但是,在您的第二个示例中,您陷入了困境,if但随后您异步调用了 Web 资源 ( availability.php)。您的代码进行 AJAX 调用($.post()调用),然后立即到达if块的末尾。 True不会返回,因此您的表单不会被提交。

您需要做的是:

  • 将您的exists===false逻辑移至单独的函数;
  • 在您的if块中,如果电子邮件有效,则调用该函数;
  • 您的函数找到表单(例如使用 jQuery),然后提交它

因此,您修改后的代码可能如下所示:

if(filter.test(a)){
        $.post('php/availability.php',{email: $('#email').val()}, function(emaildata){
            if(emaildata.exists){
                email.addClass("field_error");
                emailInfo.text("(Email address in use)");
                emailInfo.addClass("error");
            } else {
                submitForm(email, emailInfo);
            }
        }, 'JSON');
    }

然后submitForm()做类似的事情:

function submitForm(email, emailInfo){
  email.removeClass("field_error");
  emailInfo.text("");
  emailInfo.removeClass("error");
  $('#theForm').submit();
}

我想,那么,你应该看到你的表单提交。

希望这可以帮助!

于 2013-04-17T15:57:29.943 回答