0

このコードが存在するフォームでは、optionForm div がクリックされるたびにスピナー関数が起動します。最初のクリックは正常に機能し、アラートが 1 回発生します。もう一度クリックすると、2 回発射されます。3 回目のクリックで 3 回起動するなど、どこに問題がありますか?

<script type="text/javascript">

$("#optionForm").click(function() { 

    $("#process").hide().ajaxStart(function() {
        alert("show")
        $("#process").fadeIn('100');    
    })   
    .ajaxStop(function() {
        alert("hide")
        $("#process").hide();
    });

    $.post('post_requests.php', {

        scenario: ($('#scenario:checked').length ? 1 : 0 ),
        toolkit: ($('#toolkit:checked').length ? 1 : 0 ),
        newsletter: ($('#newsletter:checked').length ? 1 : 0 ),
        scenarios: $('#scenarios').val(),
        tools: $('#tools').val(),
        news: $('#news').val(),
        submit: 'yes'}, function(data) {

            $("#optionResponse").html(data).fadeIn('100');

            FadeMsg();

        }, 'text');

    function FadeMsg() {

        waiting = setInterval(function() {
            $('#optionResponse').fadeOut(500);
            },3000);    
    };

    clearInterval(waiting);
    return false; 

});         
</script>
4

3 に答える 3

2

ajaxStart呼び出しとajaxStop呼び出しは、クリック ハンドラーの外に配置する必要があります。

それらをクリックハンドラーに保持すると、新しい ajax リクエストが開始または停止するたびに実行される新しいコールバックが追加されます。

ドキュメントには、あなたがやろうとしていることに似た例もあります:

Ajax リクエストが開始されるたびに読み込みメッセージを表示します (まだアクティブなものはありません)。

于 2012-04-16T13:35:42.467 に答える
0

オプションフォームがクリックされるたびに関数でサブスクライブするためかもしれません。

代わりにこれを試してください。

$("#process").hide().ajaxStart(function() {
        alert("show")
        $("#process").fadeIn('100');    
    })   
    .ajaxStop(function() {
        alert("hide")
        $("#process").hide();
    });
$("#optionForm").click(function() { 
    // etc...
});
于 2012-04-16T13:38:21.320 に答える
0

div をクリックするたびにoptionForm、クリック イベントが発生し、新しい ajaxStart イベントが にアタッチされ$("#process")ます。
そのため、最初にクリックすると、1 つのイベントが添付されます。
そしてそれはうまくいきます。
次回クリックすると、もう 1 つのイベントが追加され、2 回発生します。
. 代わりに、とを付けてajaxStart()ください。ajaxStop()クリック関数を呼び出すときではなく、事前にイベント

于 2012-04-16T13:39:40.407 に答える