2016-05-13 6 views
1

登録フォームを作成しようとしています。私はすべてのokey関数がtrueを返す場合、3つの関数で6つの点をチェックしています。最初の関数は、ユーザー名の長さ、ユーザー名文字、およびユーザー名の可用性をチェックします。 2番目の機能は、電子メールの検証と電子メールの可用性をチェック3つ目の機能チェックはパスマッチです。良いことをすべて働かせる関数は、ここまではokeyです。しかし、最初にボタンを隠しておきたい場合は、すべての関数がtrueを返したらボタンを表示したい。しかし、それは動作しません..どこが間違っていますか?ありがとうございます。Javascriptの表示ボタンがTrueを返す場合

$(document).ready(function() { 

    $("#rname").attr('maxlength','15'); 
    $("#rmail").attr('maxlength','50'); 
    $("#rpass").attr('maxlength','50'); 


//--------------------------------------------------// MaxLenght Settings 

    $("#rname").keyup(function() { 

     var uname = checkUsername(); 

    });  // Username keyup 

//--------------------------------------------------// Username Checking 

    $("#rmail").keyup(function() { 

     var umail = checkEmail(); 

    });  // Email keyup 

//--------------------------------------------------// Email Checking 

    $("#passone, #passtwo").keyup(function() { 

     var upass = checkPass(); 

    });  // Email keyup 

//--------------------------------------------------// Password Checking 

    $("#rname, #rmail, #passone, #passtwo").keyup(function() { 

     var btn = button(uname,umail,upass); 

    });  // button show hide 

//--------------------------------------------------// Button 

});  //--------------------------------------------------// Document Ready Ends 

function checkUsername() { 

    var chars = /^[a-zA-Z0-9\.\_]*$/; 

    var username = document.getElementById("rname").value; 

    if(chars.test(username) == true) { 

     $("#notName").html("").show(); 

     if ((username.length > 3) && (username.length < 20)) { 

      $("#notName").html("").show(); 

       $.post("check.php", { username: username }, 
       function(result){ 

        if (result == true) { 

         $("#notName").html("").show(); 
         return true; 

        } 

        else { 

         $("#notName").html("Username is already exists!").show(); 
         return false; 

        } 

       }); 

     } 

     else { 

      $("#notName").html("Username must be between 3 and 20 characters!").show(); 
      return false; 

     } 

    } 

    else { 

     $("#notName").html("Username can contain just A-Z, 0-9, dot and underscore!").show(); 
     return false; 

    } 

} 

//--------------------------------------------------// checkUsername Function 

function checkEmail() { 

    var email = document.getElementById("rmail").value; 

    $.post("check.php", { vmail: email }, 
    function(result){ 

     if (result == true){ 

      $.post("check.php", { email: email }, 
      function(result){ 

       if (result == true) { 

        $("#notMail").html("").show(); 
        return true; 

       } 

       else { 

        $("#notMail").html("Email is already exists!").show(); 
        return false; 

       } 


      }); 

     } 

     else { 

      $("#notMail").html("Please enter a valid Email").show(); 
      return false; 

     } 


    }); 



} 

//--------------------------------------------------// checkEmail Function 

function checkPass() { 

    var passOne = document.getElementById("passone").value; 
    var passTwo = document.getElementById("passtwo").value; 

    if (passOne == passTwo) { 

     $("#notPass").html("").show(); 
     return true; 

    } 

    else { 

     $("#notPass").html("Passwords do not match!").show(); 
     return false; 

    } 

} 

//--------------------------------------------------// checkPass Function 

function button(a,b,c) { 

    if (a == true && b == true && c == true) { 

     document.getElementById("button").style.display = "block"; 

    } 

    else { 

     document.getElementById("button").style.display = "none"; 

    } 

} 
+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-コール) –

+0

しかし、そのように機能しない関数 – yunusus

+0

はいです。非同期関数である '$。post 'の結果を返そうとしています。 –

答えて

1

主な問題は、非同期機能の使い方を正しく理解できなかったことです。非同期関数を同期として使用しています。この質問はあなたに役立つことがあります。

jQuery Ajax POST example with PHP

しかし、ちょうどあなたが動作していない唯一のものは、ボタンの機能であると言うならば、あなたが続けると、ステップバイステップを学ぶためにしようとする、それはあなたのコードが動作することが可能です。

$("#rname").keyup(function() { 

     uname = checkUsername(); // var removed 

    });  // Username keyup 

//--------------------------------------------------// Username Checking 

    $("#rmail").keyup(function() { 

     umail = checkEmail(); 

    });  // Email keyup // var removed 

//--------------------------------------------------// Email Checking 

    $("#passone, #passtwo").keyup(function() { 

     upass = checkPass(); // var removed 

    });  // Email keyup that the variables can be read from all functions in the call to button() 

同期および非同期プログラミングについて

同期および非同期のは比較的簡単な概念である。このように、グローバル変数の代わりにローカルを使用してみてください。

同期は、プログラミングの「通常の」タイプです。あなたは関数を呼び出すと、プロセスを返します。

非同期は、何か(サーバ、Webサービスなど)を呼び出して、関数が終了してあなたが着いたときに呼び出されるものに関数を関連付けるときですそれが起こったときは制御権がありません。だから、あなたは何が最初に来るのかを知ることはできません。 2つのAjax呼び出しを行い、2つの異なる関数を割り当てたとしましょう。どの機能が最初に実行されるかはわかりません。しかし、あなたが前にしたようなことをやめさせるものではありません。これらの変数がtrueに設定されているときに実行されるwaitループを作成し、関数が特定の変数を更新してwaitループを終了するようにします。このリターンは決して起こらないと考える必要があります。サーバー上でエラーが発生する可能性があり、ajax呼び出しは単にエラーを返したり返すことはありません。したがって、この場合無限ループを行わないように考慮する必要があります。他の変数を設定してエラーを中止するエラー関数を設定します。または、ループが中断されると、中断される時間間隔を設定します。

これは、あなたに少しの概念を説明してくれることを願っています。

+0

そう...それは働いた? –

+0

実際それは私のことだとは思わなかった。同期プログラミングと非同期プログラミングの違いは何か分かりません。私はどのようなことを学ぶべきか、私のプロジェクトの例を使って情報をどこで見つけることができますか。みんなのプロジェクトが違うので最初のステップで私はこの例で理解できませんが、私は2つのプログラミングスタイルの例が必要です。 – yunusus

+0

そして私が投稿した例は役に立ちましたか? –

関連する問題