0

我有一个配置文件创建表单,其中包含一个电子邮件地址字段。我需要确保用户输入的电子邮件地址格式有效,并且还没有被使用。对于格式检查,我有一个由 isValidEmailAddress 函数执行的简单客户端验证,效果很好。对于我需要检查电子邮件地址是否不存在的另一部分,我将 jquery post 发送到控制器方法,如果电子邮件已被某人使用,则返回字符串“电子邮件地址已在使用中”......但在第一个“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;
      }
    });    
  });

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

4

5 回答 5

2

就用这个:

$(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');

    }
  });    
});
于 2012-08-30T05:36:32.663 回答
2

can ı offer different solution.

first check mail with your function after send it to php,asp file to control is already in use.

$("#new_profile").submit(function(event){

  var email = $("#user_email").val();    
  if(isValidEmailAddress(email)){


        $.post(
                'control.php?do=mail',
                {mail:email},
                function(answer){

// do something with answer

                }
          );

       });

} else{
        $(".email-check-message").html('please enter a valid email address');
        return false;
      }
于 2012-08-29T06:11:36.147 回答
0

尝试:

$(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();
    }
  });    
});
于 2012-08-29T05:53:03.770 回答
0

您必须无条件地取消提交,因为提交处理程序将在 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');
            }
        }
    });     
});
于 2012-08-29T06:15:55.133 回答
0

您可以使用

event.preventDefault()

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

这是一个有关其工作原理的示例。

于 2012-08-29T06:02:02.070 回答