小看了setTimeout().
今天做项目时,有一个这样的需求,需要动态删除的Tab,比如:可以删除某一个,可以删除多个。
每一个Tab对应一个iframe。
本来我的代码是这么写的:
//...前面代码省略
eqdiv.children("iframe")[0].contentWindow.location.replace("about:blank");
eqdiv.remove();
//...后面代码省略
上面的代码可以实现删除。但我突然奇思妙想,给remove()来个setTimeout吧,自己的内心总觉得延迟个50毫秒执行好些,于是把代码改为:
//...前面代码省略
setTimeout(function(){
eqdiv.children("iframe")[0].contentWindow.location.replace("about:blank");
eqdiv.remove();
},50);
//...后面代码省略
改了后,当时也没仔细测试,后来终于被测试员找出问题,夜晚2点被叫到公司找bug。。。
于是我慢慢找bug,发现有如下情况:
在单独关闭一个Tab时,没有问题。
在同时关闭多个Tab时,问题来了。于是我对删除Tab的代码进行了一句句调试,终于找出问题所在。
最终代码还是之前的:
//...前面代码省略
eqdiv.children("iframe")[0].contentWindow.location.replace("about:blank");
eqdiv.remove();
//...后面代码省略
之后仔细一想,的确setTimeout在做循环删除时,会有问题。
举个很简单的例子:
var a = $("#t");
$("<p>1</p>").appendTo(a);
setTimeout(function(){
$("<p>2</p>").appendTo(a);
},500);
$("<p>3</p>").appendTo(a);
运行结果肯定是: 1 , 3 , 2
但我脑子里 当时 怎么就忘记setTimeout() 的这个特性了呢 , 循环时真的要注意啊 。
时间:2009-10-22
标签:setTimeout
评论:8
查看:2254
分享到QQ
分享到百度
如果你有什么好文章,请与我们分享。cssrain[at]gmail.com 我要投稿
为了使你得到本站最新信息,建议你订阅本站。点击此处订阅
广告也精彩:
- 1
想知道,夜里两点改bug,点击量很大呀!
- 1