为什么这种写法,js的setTimeout只执行一次?

functiondelayURL(url,time){Time();//如果改为setTimeout("Time()",1000)就可以了??为什么??setTimeou... function delayURL(url, time) {
Time();//如果改为setTimeout("Time()",1000)就可以了??为什么??
setTimeout("top.location.href='" + url + "'", time);

}
var time = 3;
function Time(){

time = time-1;
document.getElementById('second').innerHTML=time;
setTimeout("Time()",1000);
}
delayURL('article.jsp','3000');
展开
 我来答
雨之快乐dca51ae
推荐于2017-09-30 · TA获得超过327个赞
知道小有建树答主
回答量:308
采纳率:33%
帮助的人:119万
展开全部
setTimeout是延迟执行,只执行一次,不是定时器
多次间断执行要用setInterval
var timer = setInterval( function(){}, 1000);

取消用clearInterval(timer);
追问
看到time里面还有一个循环了吗?我跳转是可以的,其中有一个倒计时的功能我是通过settimeout 里面再对settimeout进行调用实现循环,如果有setTimeout("Time()",1000)就可以实现3,2,1,0这样的。如果变成time()就不出现3,2,1只有3,time函数只用了一次。
追答

我认真看了下
首先js执行delayURL('article.jsp','3000');
执行到了
delayURL()
但是先执行了Time();
time由3变为2再变为1再变为0,染后变为-1……
你应该在Time()函数里加个判断
if(time==0)
{
top.location.href=url;
}
你说delayURL函数里改为
setTimeout("Time()",1000);
setTimeout("top.location.href='" + url + "'", time);
可以
其实就可以
因为
setTimeout("Time()",1000);
这句指延迟1000毫秒执行Time函数
setTimeout("top.location.href='" + url + "'", time);
这句指延迟3毫秒执行"top.location.href='" + url + "'",命令
当然3毫秒执行的快了
应该是这样
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
addChild
2013-01-24 · 超过16用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:53.3万
展开全部
我试了你的代码,可以正常跳转啊
追问
看到time里面还有一个循环了吗?我跳转是可以的,其中有一个倒计时的功能我是通过settimeout 里面再对settimeout进行调用实现循环,如果有setTimeout("Time()",1000)就可以实现3,2,1,0这样的。如果变成time()就不出现3,2,1只有3,time函数只用了一次。
追答
奇怪,我试了会3,2,1,0倒计时的
var t=setInterval("jishi()",1000);
var t1=3;
function jishi(){
document.getElementById("second").innerHTML=t1;
if(t1==0){
location.replace("url");
}
t1--;
}
你用这种方法试下
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式