作者tomin (for pete's sake)
看板Ajax
标题[问题] 奇妙的setTimeout() 一次执行多个function
时间Fri Jun 12 20:21:58 2009
这个问题,我已经疑惑了很久。
常常有需要一次执行多个function() 比如说window.onload後 一次做多个动作
想当然所有的function一次写完,可是往往第二个function之後的,没有作用。
document.getElementById('banner').onclick=goHome;//有用
document.getElementById('banner2').onclick=goHome;//没用
神奇的是,同样的code,加上setTimeout就可以了。
setTimeout("document.getElementById('banner').onclick=goHome",0)//有用
setTimeout("document.getElementById('banner2').onclick=goHome",0)//有用
通常millsec我会随便设个100,200,但上例用0也行。
我不知道为什麽,但这样做就可以work了!
再一个例子。
这样常常不行。
charlie();
wake_up();
go_go();
shoe_shoe();
这样就可以。
setTimeout(charlie,100);
setTimeout(wake_up,500);
setTimeout(go_go,800);
setTimeout(shoe_shoe,900);
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.40.183
1F:推 chph:顺序不对吧. 检查你的 js 是否在 HTML 载入完成以前就执行了 06/12 22:14
2F:→ tomin:应该都是window.onload之後的事件(通常是使用者触发的)了 06/13 00:05
重点在「多个」,一个一个来都没问题的。第一个一般是没问题。
例一
test1();//有用
test2();//没用
test3();//没用
例二
test2();//有用
test1();//没用
test3();//没用
例三
test3();//有用
test2();//没用
test1();//没用
看出来了吗?只要摆在第一个,就可以正确的执行。第二个、第三个则不一定。
我怀疑是浏览器的安全性设定所导致。
当然也可能是我搞错了。不过这问题我满常遇到的。
============================ 暂时没事了 ================================
我自己写了小范例,试不出来。不过我大概知道其中一个问题了。
当某id不存在,仍然去get它,会发生错误,导致接下来的code都没作用。
document.getElementById('a').onclick=goHome;//发生错误
document.getElementById('b').onclick=goHome;//没用
document.getElementById('a').onclick=goHome;//没用
document.getElementById('b').onclick=goHome;//没用
<div id="b" class="word">罗</div>
<div id="c" class="word">世</div>
<div id="d" class="word">界</div>
※ 编辑: tomin 来自: 122.116.40.183 (06/13 01:00)
3F:→ awkwdrily:..................... 06/13 16:09
4F:→ awkwdrily:这不是直译的语言吗 06/13 16:09