暂停直到使用jquery或javascript完成事件/功能

时间:2012-05-04 18:55:32

标签: javascript jquery

有没有办法检查某个函数是否已使用javascript或jquery完成其操作?

我正在尝试使用setTimeout使计数器随着数字变大而减慢(减速输出,如果你愿意的话)。如您所知,数字越大,延迟时间越长(在setTimeout中)。

我要做的是单击一个按钮,然后在屏幕上打印当前循环迭代。这个循环数被用作setTimeout延迟,所以当数字很低时它将迅速冲过去,因为它越大,延迟就越大,从而使得打印数字更慢(因为这个数字是延迟,延迟越大)它打印的次数越少)。

Here is the logic I'm trying to accomplish
1. Click button
2. Initiate loop
3. trigger function to set timeout
4. set timeout triggers a function to print the loop iteration #
5. Repeat step 3 until the number of set iterations is completed

好吧,正如您可以看到设置超时的时间,循环将继续,但会有超时延迟。有什么办法可以让一个暂停类型的函数等到超时函数完成,然后继续下一次迭代?

这是我的代码

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>

<body>
<form>
<input type="button" value="Display alert box"
onclick="setMessage()" />

<script>

 function setMessage(){
 for(i=0;i<5000;i++){
 var b = i;
 timeMsg();
//some sort of puase here checking until timeMsg & docWrite are completed, then continue to the next iteration
    }
}

function timeMsg(){
var t=setTimeout("docWrite()",b);
}   


function docWrite(){
document.write(i);
}
</script>
</form>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

我建议不要在for循环中执行此操作,而是建议执行以下操作:

function docWrite(i){
    document.write(i);
}

function timeMsg(counter) {
  var t;

  counter++;
  if (counter < 5000) {
    t = setTimeout(function(counter){ 
      docWrite(counter);
      timeMsg(counter);
    }, counter, counter)    
  }
}

timeMsg(0);