1

2 つの異なるイベントに対して異なる読み込みメッセージをバインドしています。

AJAX 呼び出しの前に動作をバインドするために使用している関数を次に示します。一致する各 Ajax 送信の前に各関数を呼び出して、それぞれの正しい読み込みメッセージが表示されるようにします。

function BindPersonalityLoader()
{

    // Bind the loader to personality
    $('document').bind("ajaxStart", function() {
        // Show the loader
        $('img#personality_loader').show();
    });

    // Bind the loader to personality
    $('document').bind("ajaxStop", function() {
        // Show the loader
        $('img#personality_loader').hide();
    });
}

function BindLoadEditPersonalityLoader()
{

    // Bind the loader for editing a personality
    $('document').bind("ajaxStart", function() {

        // Hide the edit form
        $('div#quiz_maker_add_personality_wrapper').hide();

        // Show the loader
        $('div#quiz_maker_edit_personality_loader').show();
    });

    // Bind the loader for editing a personality
    $('document').bind("ajaxStop", function() {

        // Hide the loader
        $('div#quiz_maker_edit_personality_loader').hide();
    });
}

を呼び出すとすぐにBindLoadEditPersonalityLoader()、これは何らかの理由で永続的になりBindPersonalityLoader()ます。コード内で呼び出しても、他の動作が期待されます。

コードを呼び出す何らかの理由で、「バインド」をオーバーライドしていません。

たとえば、次のコードを実行するBindLoadEditPersonalityLoader()と、最初に呼び出されたため、 の動作がずっと維持されます。

// Bind the loaders once
BindLoadEditPersonalityLoader();

// Bind the loaders to different behaviour
BindPersonalityLoader();

alert()いつ呼び出されたかを確認できるように、2 つのメッセージを含めました。

電話をかけてみunbind("ajaxStart ajaxStop");ましたが、これもうまくいきませんでした。

これは、2 つの異なるイベント内でバインドを呼び出す方法です。

    // Add a new personality to the quiz
$('form#personality_editor').submit(function(e) {

    e.preventDefault();

    // Bind the loader to personality loader
    BindPersonalityLoader();

            // AJAX Call here

    });

    // Edit a personality already existing within the quiz
$('a.personality_edit').live('click', function(e) {

    e.preventDefault();

    // Bind loader for editing personality
    BindLoadEditPersonalityLoader();

            // Ajax call here
    });
4

2 に答える 2

1

ajaxStopはグローバルイベントでありajaxStart、保留中のajaxリクエストが他にない場合はajaxリクエストが開始されるたびに、イベントはすべての要素でトリガーされ、保留中のajaxリクエストが他にない場合はajaxリクエストが終了するたびにイベントがトリガーされます。

複数のローディングボックスを用意する理由はありません。ローディングボックスを1つだけ持つことを検討しましたが、そこに表示されているものを簡単に変更する方法がありますか?

$("#loader").ajaxStart(function(){
    $(this).show();
}).ajaxStop(function(){
    $(this).fadeOut();
});
// ... later on ...
$("#loader span.infotext").text("Loading User Profile, please wait...");
$.ajax({ ... });
于 2012-09-12T14:39:42.520 に答える
0

イベントを別のオブジェクトにバインドしているため、バインドは「上書き」されていません。

$('img#personality_loader').bind("ajaxStart", function() {...});
$('div#quiz_maker_edit_personality_loader').bind("ajaxStart", function() {...});

でバインド/バインド解除を試してください$(document)('s なし)

于 2012-09-12T12:58:48.710 に答える