jquery在通过ajax提交表单之前通过ajaxvalidation电子邮件

我有一个配置文件创建表单,其中包含电子邮件地址字段。 我需要确保用户输入的电子邮件地址格式有效,并且它还没有被使用。 对于格式检查,我有一个简单的客户端validation由isValidEmailAddress函数执行,该函数运行良好。 对于我需要检查电子邮件地址是否尚不存在的其他部分,我对控制器方法执行了一个jquerypost,该方法返回一个字符串“已经在使用的电子邮件地址”,如果该电子邮件已经被某人使用过了…但是第一个“return false”下面的代码并没有阻止表单提交。 这是一个异步的jquery吗?

$(document).ready(function(){ $("#new_profile").submit(function(){ var email = $("#user_email").val(); if(isValidEmailAddress(email)){ jQuery.post('/profiles/validate_email', {email: email}, function(data){ if(data.match(/in use/)){ $(".email-check-message").html(data); return false; } }); } else{ $(".email-check-message").html('please enter a valid email address'); return false; } }); }); 

此外,上述函数中的jquerypost似乎没有工作..因为我没有看到服务器日志中发生的服务器调用。 有谁知道发生了什么事? 谢谢。

您必须无条件地取消提交,因为提交处理程序将在ajax请求返回之前完成执行(除非您将async设置为false),因此您无法阻止已经发生的操作。 您可以设置一个标志以指示电子邮件是否有效,然后提交表单

 $(document).ready(function(){ $("#new_profile").submit(function(e){ if (!$('#new_profile').data('validemail')){ e.preventDefault(); var email = $("#user_email").val(); if(isValidEmailAddress(email)){ jQuery.post('/profiles/validate_email', {email: email}, function(data){ if(data.match(/in use/)){ $(".email-check-message").html(data); } else{ $('#new_profile').data('validemail', true).submit(); } }); } else{ $(".email-check-message").html('please enter a valid email address'); } } }); }); 

可以提供不同的解决方案。

首先用你的函数检查邮件后发送到php,asp文件控制已经在使用中。

 $("#new_profile").submit(function(event){ var email = $("#user_email").val(); if(isValidEmailAddress(email)){ $.post( 'control.php?do=mail', {mail:email}, function(answer){ 

//做一些回答

  } ); }); } else{ $(".email-check-message").html('please enter a valid email address'); return false; } 

只是用这个:

 $(document).ready(function(){ $("#new_profile").submit(function(event){ var email = $("#user_email").val(); if(isValidEmailAddress(email)){ jQuery.post('/profiles/validate_email', {email: email}, function(data){ if(data.match(/in use/)){ $(".email-check-message").html(data); event.preventDefault(); } }); } else{ $(".email-check-message").html('please enter a valid email address'); } }); }); 

您可以使用

 event.preventDefault() 

当您检查有效电子邮件失败或电子邮件已被使用时,停止提交表单。

这是一个如何工作的例子 。

尝试:

 $(document).ready(function(){ $("#new_profile").submit(function(event){ var email = $("#user_email").val(); if(isValidEmailAddress(email)){ jQuery.post('/profiles/validate_email', {email: email}, function(data){ if(data.match(/in use/)){ $(".email-check-message").html(data); event.preventDefault(); } }); } else{ $(".email-check-message").html('please enter a valid email address'); event.preventDefault(); } }); });