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

我的代码并没有真正停止该函数,而是再次调用它。这最终导致多个输出并相互重叠。如何确保该功能一次只停止并运行一个?

$(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);

这样,您只运行一个计时器,您可以随时清除它。

于 2012-05-15T15:30:25.313 回答