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
});