网络编程
位置:首页>> 网络编程>> JavaScript>> 小看了setTimeout()

小看了setTimeout()

 来源:cssrain 发布时间:2009-12-04 12:44:00 

标签:setTimeout,tab,删除

今天做项目时,有一个这样的需求,需要动态删除的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() 的这个特性了呢  , 循环时真的要注意啊 。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com