2012-05-06 14 views
0

要素に.click()イベントがあります。閉鎖された後、この暴動が起こり、AJAXコールが進行します。それはすべて起こります。jQueryで2つのイベントを待って、両方が完了したらコールバックを実行します。

トランジションがサポートされていなくても、両方の処理が完了したときに.click()関数を実行するコールバックが必要です。

jQueryは、ajax呼び出しとトランジションを待つ必要があります。その後、ajax呼び出しが完了してトランジションが完了したか、まったく実行されなかった後にコールバックを実行する必要があります。

どうすればいいですか?ありがとう!

注:私は$.ajax()をajax呼び出しに使用しており、問題の要素では通常のCSS3遷移を使用しています。私はjavascriptイベントバインディングでtransitionEndを検出できます。私は、transitionEndと呼ばれる変数の設定と、ブラウザのサポートトランジションがsupportsTransを呼び出すかどうかを検出する別の変数を持っています。

+0

*(私は間違った質問を選んだのですが、以前はこの質問に少なくとも2つのバリエーションがありました。)* –

+0

いいえ、私にはtransitionEndイベントが関係するため、もう少し複雑です。 – alt

+0

@Jackson:はい、間違った質問を選んでコメントを編集しました。しかし、一日の終わりには、これは次のようになります。二つのことが起こるまでどのように待つのですか?私は間違いなく前にその質問を見てきました。答えは簡単です。 –

答えて

5

イベントごとにフラグを設定します。最初はfalseです。問題の2つのイベントをフックしてください(transitionEndとajax successのように聞こえます)。各イベントはフラグを設定し、関数を呼び出します。その関数はフラグをチェックします:もし両方がセットされていれば、何かします。

ここでは、CSSを移行するのではなく、animateを使用して、単純なものにする例を示します。Live example | source

jQuery(function($) { 

    $("#theButton").click(function() { 
    this.style.display = "none"; 
    $("#box, #content").show(); 
    doTheStuff(); 
    }); 

    function doTheStuff() { 
    var ajaxDone = false, 
     ajaxFailed = false, 
     animationDone = false; 

    display("Triggering ajax and animation"); 

    $.ajax({ 
     url: "http://jsbin.com/ibebiv", 
     method: "GET", 
     success: function(data) { 
     $("#content").append(data); 
     display("ajax done"); 
     ajaxDone = true; 
     checkDone(); 
     }, 
     error: function() { 
     ajaxFailed = true; 
     checkDone(); 
     } 
    }); 

    $("#box").animate({ 
     left: "+200px" 
    }, function() { 
     display("animation done"); 
     animationDone = true; 
     checkDone(); 
    }); 

    function checkDone() { 
     if ((ajaxDone || ajaxFailed) && animationFlag) { 
     display("<strong>All done</strong>"); 
     } 
    } 
    } 

    function display(msg) { 
    $("<p>").html(msg).appendTo("#content"); 
    } 
}); 

ajax呼び出しが失敗した場合のエラー処理に注意してください。

+0

フラグを設定するにはどうすればよいですか? – alt

+0

で、彼は私が推測する変数を意味していました。例:flag ++;それぞれのイベントのコールバックの中で、関数自体を呼び出します。 if(flag == 2)が真の場合、両方のイベントが発生したことを意味します。 – KBN

+0

@JacksonGariety:* "どのようにフラグを設定するのですか?" * 'var flag = false;'そしてその後は 'flag = true;' –

関連する問題