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