+ -
当前位置:首页 → 问答吧 → setTimeout()延迟执行问题,求教

setTimeout()延迟执行问题,求教

时间:2011-11-15

来源:互联网

这是我写的排序代码(不同高度的柱形条)的一部分,就是交换两个数字的位置,排序正常。
Array.prototype.swap=function(a, b)
{  
var tmp=this[a];
this[a]=this[b];
this[b]=tmp;
document.getElementById("div"+a).style.width = this[a]+'px';
document.getElementById("div"+b).style.width = this[b]+'px';
}
我想交换位置有一定的延迟,就改成了如下代码:
Array.prototype.swap=function(a, b)
{  
  setTimeout(function(){
var tmp=this[a];
this[a]=this[b];
this[b]=tmp;
document.getElementById("div"+a).style.width = this[a]+'px';
document.getElementById("div"+b).style.width = this[b]+'px';
},100);
}
但是再次执行排序确根本不执行,为什么啊?thanks!

作者: toctan   发布时间: 2011-11-15

里面的this值变了吧,试一下用call

作者: p2227   发布时间: 2011-11-15

应该是this引起的 。
你把this[a] this[b]都先放到外面来 。

作者: zell419   发布时间: 2011-11-15

又想到一个思路

JScript code

Array.prototype.swap=function(a, b)
{   var that = this;
  setTimeout(function(){
var tmp=that[a];
that[a]=that[b];
that[b]=tmp;
document.getElementById("div"+a).style.width = that[a]+'px';
document.getElementById("div"+b).style.width = that[b]+'px';
},100);
}

作者: p2227   发布时间: 2011-11-15

谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?
引用 2 楼 zell419 的回复:

应该是this引起的 。
你把this[a] this[b]都先放到外面来 。

作者: toctan   发布时间: 2011-11-15

谢谢。虽然能执行了,但是结果不正确,没时间延迟,并且柱形条高度变了。我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?
引用 3 楼 p2227 的回复:

又想到一个思路

JScript code

Array.prototype.swap=function(a, b)
{ var that = this;
  setTimeout(function(){
var tmp=that[a];
that[a]=that[b];
that[b]=tmp;
document.getElementById("div"+a).style.width……

作者: toctan   发布时间: 2011-11-15

引用 4 楼 toctan 的回复:

谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?
引用 2 楼 zell419 的回复:

应该是this引起的 。
你把this[a] this[b]都先放到外面来 。

JScript code
Array.prototype.swap=function(a, b)
{   
  setTimeout(function(){
var tmp=this[a];
this[a]=this[b];
this[b]=tmp;
document.getElementById("div"+a).style.width = this[a]+'px';
document.getElementById("div"+b).style.width = this[b]+'px';
},100).call(this);
}


这样也不行?

作者: p2227   发布时间: 2011-11-15

不行也。没法暂停……
引用 6 楼 p2227 的回复:

引用 4 楼 toctan 的回复:

谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?
引用 2 楼 zell419 的回复:

应该是this引起的 。
你把this[a] this[b]都先放到外面来 。

JScript code
Array.prototyp……

作者: toctan   发布时间: 2011-11-15

相关阅读 更多

热门下载

更多