怎么让JS延迟10S执行?

fisherboy 2008-07-23 09:46:01
比如
for(i=1;i<10;i++)
{
alert(i);
delay(10);//延迟10s再执行下一步
}
有没有现成的方法?函数?
...全文
43400 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhulin10541 2011-08-15
  • 打赏
  • 举报
回复
搜到这个帖子,MS可以把循环弄成递归, 然后
var i = 0;
function a(i){
setInterval("a(i++)",1000);
}
kevenchung 2010-02-03
  • 打赏
  • 举报
回复
另外补充一点,方法自调很容易出现死循环,我不太清楚这样写法有什么不好的地方
kevenchung 2010-02-03
  • 打赏
  • 举报
回复
这个问题也困绕了好久
今日再搜索也未果
不过突然想出另外种实现方法,不知是不是楼主要的
我原先的代码
function reloadAll(){
if(confirm("确认要刷新所有行数据吗?") == true){
var tableObj = document.getElementById("matchList");
for(var i=1; i<tableObj.rows.length; i++){
var imgs = tableObj.rows[i].getElementsByTagName("img");
if(imgs.length > 0){
imgs[0].click();
}
}
}
}
逻辑就是点击表格中的一个图片
在碰到有几百行的时候,IE会假死,这令我很不爽
于是想能否延时的执行各行中的click()方法,也就是在for循环中使用延时,但搜索后未果-_-b
现在想出另外种方式,实验下来效果也不错,代码如下
function reloadAll(){
if(confirm("确认要刷新所有行数据吗?") == true){
var tableObj = document.getElementById("matchList");
setTimeout('imgClick(1, '+tableObj.rows.length+')',1000);
}
}

function imgClick(rowIndex, rowsLength){
var tableObj = document.getElementById("matchList");
var imgs = tableObj.rows[rowIndex].getElementsByTagName("img");
if(imgs.length > 0){
imgs[0].click();
}
rowIndex = rowIndex + 1;
if(rowIndex < rowsLength){
setTimeout('imgClick('+rowIndex+', '+rowsLength+')',1000);
}
}
把FOR循环中的条件判断作为参数,调用另外一个方法,方法中判断条件是否成立,如果成立,则循环调用本身,这样imgClick只有在上一个被调用后1000毫秒后执行下一个imgClick,这样就变成了延时间,而且如果各个延时不同,也可以在IF中判断

如过用第1种方式直接在FOR循环中使用延迟调用imgClick(),则是1000毫秒后,全部都执行了......

希望这个对楼主有用,不过看帖子时间,似乎过了很久很久了.........
itpentiuman 2008-08-06
  • 打赏
  • 举报
回复
我找寻JavaScript的sleep函数已经几年了,没有
leosming 2008-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lawrendc 的回复:]
JScript code
setTimeout(function(){alert("Hello world");},10000);
[/Quote]
nicholsky 2008-07-26
  • 打赏
  • 举报
回复
21楼的就是一种变能方法,而且只能这样,23楼的就说了,强制搞一些东西去进行延迟会让IE假死,不现实,所以楼主想要构造一个能在for里延迟的函数是不可能实现的,明知不可为的事就不要想了。
HonorsOffice 2008-07-26
  • 打赏
  • 举报
回复
JS中没有你说的那种自带的方法,但可以通过模拟来实现这种效果。
网站上搜索一下,去吧。
chris9999 2008-07-24
  • 打赏
  • 举报
回复
setTimeOut
就可以了
lyboyc 2008-07-24
  • 打赏
  • 举报
回复
写错了,书里似乎是把一种循环用另一种循环替代,记得数据结构书里有这个,LZ自己学看吧,清华版的那本
lyboyc 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 fisherboy 的回复:]
[color=#0000FF]如果用setTimeout  setInterval 我就不用来问你们了。
别把我的问题看的那么简单。
我就是要在for循环里实现。

另外,
有一100行的代码里,
我在50行和52行之间的51行,要实现延时10S,10S之后再执行第52行的代码。
这100行代码没有一个function。全部是顺序执行的。


附:
别问我为什么100行代码没有一个函数。只要你在现实开发中,你就有可能遇到很棘手的现实的问题。
事实如此。
怎么样?[/col…
[/Quote]

楼主去翻翻数据结构吧,里面有把循环全部转成非循环的方法 ,我是忘记了
lt1129 2008-07-24
  • 打赏
  • 举报
回复
setTimeOut
orz_ORZ_orz 2008-07-24
  • 打赏
  • 举报
回复
关注
s_liangchao1s 2008-07-24
  • 打赏
  • 举报
回复
个人认为 单纯从for循环的角度来看 是无法实现的
fisherboy 2008-07-24
  • 打赏
  • 举报
回复
如果用setTimeout setInterval 我就不用来问你们了。
别把我的问题看的那么简单。
我就是要在for循环里实现。

另外,
有一100行的代码里,
我在50行和52行之间的51行,要实现延时10S,10S之后再执行第52行的代码。
这100行代码没有一个function。全部是顺序执行的。


附:
别问我为什么100行代码没有一个函数。只要你在现实开发中,你就有可能遇到很棘手的现实的问题。
事实如此。
怎么样?
lawrendc 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 s_liangchao1s 的回复:]
引用 13 楼 lawrendc 的回复:
呵呵

你说我理解的对不?
[/Quote]

right
nicholsky 2008-07-23
  • 打赏
  • 举报
回复
s_liangchao1s说得对,JS无办法在for循环里延迟一个时间再执行下一次的循环,不行的。

只能变通,不用for来循环,采取setTimeout或setInterval去执行i次函数或语句,把i作为全局变量或传递参数进行每次+1,以前有人试过想做出一个完美的类似vbs的sleep,但结果总是不如愿的,别想了。
s_liangchao1s 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lawrendc 的回复:]
呵呵
[/Quote]
你说我理解的对不?
lawrendc 2008-07-23
  • 打赏
  • 举报
回复
呵呵
s_liangchao1s 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lawrendc 的回复:]
引用 9 楼 s_liangchao1s 的回复:
引用 8 楼 lyboyc 的回复:
2楼正解setTimeout('function(){......}',10000);


还真有敢说正解的


老大 我那句错在哪里??
[/Quote]
哦 也许我理解错了 我理解楼主的要求是让for循环每隔10秒走一步
lawrendc 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 s_liangchao1s 的回复:]
引用 8 楼 lyboyc 的回复:
2楼正解setTimeout('function(){......}',10000);


还真有敢说正解的
[/Quote]

老大 我那句错在哪里??
加载更多回复(17)

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧