私はこのshowMessage関数を持っています:
関数 showMessage(メッセージ) {
$('#my_message').show();
$('#my_message').html(メッセージ);
setTimeout(function(){$('#my_message').fadeOut();},
2000);
}
ただし、setTimeout() および/または fadeOut() が完了する前に再度呼び出されると、正しく機能しません。すなわち。最初からやり直さず、2 秒待ちます。ご想像のとおり、少し途切れます。どうすればsetTimeoutとfadeOutをクリアして期待通りに動作させることができますか?
編集:
setTimeout() の代わりに jQuery delay() を使用することが提案されました。しかし、delay() が適切に機能するとは思いません (jQuery delay() doc ページでは、delay() をキャンセルできないと書かれています)。更新されたコードは次のとおりです。
$(document).ready(function() {
$('#my_form').submit(関数() {
$('#my_message').stop();
$('#my_message').hide();
$.get('/my_url',
$('#my_form').serialize(),
関数(データ) {
showMessage(データ);
});
false を返します。
});
});
関数 showMessage(メッセージ) {
$('#my_message').html(メッセージ);
$('#my_message').show();
$('#my_message').delay(5000).fadeOut();
}
そのため、メッセージは 5 秒間表示されてから消えます。問題は、遅延がキャンセルされないことです。たとえば、フォームを 1 回送信してメッセージを表示し、4 秒待ってから再度送信すると、最初の遅延はまだ有効であるため、2 番目の遅延は 1 秒のように見えます。では、遅延が中断された場合でも、遅延を常に 5 秒にする方法を教えてください。使っstop(true)てstop('fx', true)みましたが、どちらも効果がないようでした。