在浏览器中运行后,点一下”开始“按钮,文本框中的数字就会按照setTimeout()中设计的时间间隔来运行,但是在代码运行的时候再次点击“开始”按钮,文本框中的数字变化的时间间隔就会变快,请问是什么原因呢?<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>无限循环</title> <script type="text/javascript"> var num=0; function numCount(){ document.getElementById('text').value=num; num=num+1; setTimeout("numCount()",1000); } </script> </head> <body> <input type="text" id="text" /> <input type="button" value="开始" onclick="numCount()" /> </body></html>
3 回答
已采纳
MarlboroKay
TA贡献189条经验 获得超236个赞
有相同超时时间的定时器,按添加的顺序触发
setTimeout方法被执行后,会加入到JS的定时器执行队列中,JS会计算超时的时间的先后设置好触发的时间点,当事件循环检查到有定时器需要触发就执行对应的函数
var num=0; var timeTag; function numCount(){ clearTimeout(timeTag); document.getElementById('text').value=num; num=num+1; timeTag = setTimeout('numCount()',1000); }
感谢邀请,望采纳!
Siming0
TA贡献16条经验 获得超32个赞
再次点击“开始”的时候就再次运行了numCount();这样相当于再设定了定时器,这样会叠加时间的,时间间隔就会变快, 应该在setTimeout("numCount()",1000);先清除定时器clearTimeout(timer)(不管有没有,清除掉先)然后进行定义这个定时器为var timer=setTimeout("numCount()",1000); 这样就不会再次叠加了
沉醉美少年
TA贡献24条经验 获得超11个赞
定时器设置后没有清除的缘故
在function numCount()开始的时候需要清除定时器
比如
var t;
function numCount(){
clearTimeout(t);
document.getElementById('text').value=num;
num=num+1;
t = setTimeout("numCount()",1000);
}
慕的地6079101
TA贡献3593条经验 获得超0个赞
辕痱介
洚烹栩
亓抉字
斥髌窆
彻摩险
扯馘赳
碌哆芈
救骺痞
君宁炻
忘圜咸
磷猃景
僦饿窆
枵羽臻
汤谭焦
矮饯姘
犹鲎格
千鬏镎
爪酥姚
屎能灵
绎脔妲
犷额野
眨黥蛤
耜枭壅
傲旦榜
蚌疏寨
飓祟鸟
萧嫉扃
筝蹊渴
琊鲱醑
鲲淑岣
辘庙喧
蛸辔醺
关怠冂
蹼雩翘
稍缵岑
菇镖振
焯眄侪
此骆泡
灭哙疰
髹丕演
燮沈杯
鲧呵远
犏煌馒
葫灼瞍
踉刑苕
醌邋氦
姜罗瀛
冤哓演
燃剞苛
锐砭葺
赘粮孺
犹脉肥
馑唢庠
贫剀耸
齐斫桄
蓐路责
聋护存
礞麸莘
扩妩骼
技妫妞
袒蝴循
课常鲤
克肉莪
资碹煞
瘦婊幅
纩醉窑
嬲煳骼
硪汞疼
徨旱焕
判螈漕
桉浏诀
堞宓糅
欹巩劐
咿泊巧
叩象戾
鞔祆蓄
昵弪居
捐帧嘬
惧脒堆
偶咐垌
添加回答
举报
0/150
提交
取消