0

プログラムで一度呼び出される次の関数があります。ユーザーの操作がない場合、配列が出力されると、再帰によって何度も繰り返されます。ただし、ユーザーがリンクをクリックすると、関数は最初に停止され (配列からの出力はなくなります)、次に新しいパラメーターで再び開始されます。

function getText(mode){

        var para = mode;
        var url = "getText.php?mode=" + para;

        var arr = new Array();

        //get array via ajax-request

        var $div = $('#text_wrapper');

        $.each(arr, function(index, value){  
            eachID = setTimeout(function(){
                    $div.html(value).stop(true, true).fadeIn().delay(5000).fadeOut();
                    if(index == (arr.length-1)){
                        clearTimeout(eachID);
                        getText(para);
                    }
            }, 6000 * index); 
        });
    }

私のコードは実際には関数を停止しませんが、もう一度呼び出します。そして、それは最終的に複数の出力になり、互いに重なり合います。関数が一度に 1 つだけ停止して実行されるようにするにはどうすればよいですか?

$(document).ready(function() {
    $("#div1, #div2").click(function(e){
        e.preventDefault();
        var select = $(this).attr("id");
        clearTimeout(eachID);

        getText(select);
    });
});
4

1 に答える 1

2

eachID最新のもので上書きし続けるので、最後のものだけを停止しているsetTimeoutとき。clearTimeout(eachID)

個人的には、次のようなことをするのが好きです。

id = 0;
timer = setInterval(function() {
    // do stuff with arr[id]
    id++;
    if( id >= arr.length) clearInterval(timer);
},6000);

このように、実行中のタイマーは 1 つだけで、いつでもクリアできます。

于 2012-05-15T15:30:25.313 に答える