0

メールアドレスフィールドを持つプロファイル作成フォームがあります。ユーザーが入力したメールアドレスが有効な形式であり、まだ使用されていないことを確認する必要があります。フォーマットチェックのために、私はisValidEmailAddress関数によって実行される単純なクライアント側の検証を持っています。これはうまく機能します。電子メールアドレスがまだ存在しないかどうかを確認する必要がある他の部分については、電子メールがすでに誰かによって使用されている場合に文字列「電子メールアドレスはすでに使用されています」を返すコントローラーメソッドにjquery投稿を行います。最初の「returnfalse」の下のコードは、フォームの送信を停止していません。これは非同期のものである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

別の解決策を提供できますか。

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;
      }
于 2012-08-29T06:11:36.147 に答える
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 に答える
0

使用できます

event.preventDefault()

有効な電子メールのチェックに失敗した場合、または電子メールがすでに使用されている場合に、フォームの送信を停止します。

これがどのように機能するかの例です。

于 2012-08-29T06:02:02.070 に答える
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 に答える