Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
暂停,直到使用jquery或javascript完成事件/函数_Javascript_Jquery - Fatal编程技术网

暂停,直到使用jquery或javascript完成事件/函数

暂停,直到使用jquery或javascript完成事件/函数,javascript,jquery,Javascript,Jquery,有没有一种方法可以使用javascript或jquery检查函数是否已完成其操作 我正在尝试使用setTimeout制作一个随着数字变大而变慢的计数器(如果愿意的话,可以降低输出速度)。如您所知,数字越大,延迟越长(在setTimeout中) 我试图做的是点击一个按钮,然后当前的循环迭代被打印在屏幕上。此循环数用作setTimeout延迟,因此当该数字较低时,它将快速通过,当它变大时,延迟越大,从而使它打印数字的速度越慢(因为该数字是延迟,延迟越大,它打印数字的频率越低) 正如您所看到的,当设置

有没有一种方法可以使用javascript或jquery检查函数是否已完成其操作

我正在尝试使用setTimeout制作一个随着数字变大而变慢的计数器(如果愿意的话,可以降低输出速度)。如您所知,数字越大,延迟越长(在setTimeout中)

我试图做的是点击一个按钮,然后当前的循环迭代被打印在屏幕上。此循环数用作setTimeout延迟,因此当该数字较低时,它将快速通过,当它变大时,延迟越大,从而使它打印数字的速度越慢(因为该数字是延迟,延迟越大,它打印数字的频率越低)

正如您所看到的,当设置超时时,循环将继续,但会有超时延迟。有没有什么方法可以让我放置一个暂停类型的函数,等待超时函数完成,然后继续下一次迭代

这是我的密码

<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>

函数setMessage(){

对于(i=0;i而不是在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);
函数docWrite(i){
文件.编写(i);
}
函数timeMsg(计数器){
变量t;
计数器++;
如果(计数器<5000){
t=设置超时(函数(计数器){
docWrite(计数器);
timeMsg(计数器);
},柜台,柜台)
}
}
timeMsg(0);

我考虑过这一点,但我使用for循环的原因是,我可以暂停并允许另一个函数打印,然后继续。我仍然可以使用if语句进行打印吗?打印是同步进行的,您不必等待它。它将在执行脚本的下一行之前完成。setTimeout回调函数将执行Ansynchronous,因此任何需要在完成后执行的代码都需要在setTimeouts回调中。谢谢,我没有意识到。这将如何实现到我上面的代码中?我试图复制/粘贴它,但没有工作。这是因为计时器最初没有设置吗?也许我删除了一些我不应该删除的内容。哇,小错误。编辑它,现在您应该能够复制/粘贴以替换您在问题中给出的代码。
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);