问题描述
这是我写的排序代码(不同高度的柱形条)的一部分,就是交换两个数字的位置,排序正常。Array.prototype.swap=function(a,b){vartmp=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(){vartmp=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!
解决方案
解决方案二:
里面的this值变了吧,试一下用call
解决方案三:
应该是this引起的。你把this[a]this[b]都先放到外面来。
解决方案四:
又想到一个思路Array.prototype.swap=function(a,b){varthat=this;setTimeout(function(){vartmp=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);}
解决方案五:
谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?引用2楼zell419的回复:
应该是this引起的。你把this[a]this[b]都先放到外面来。
解决方案六:
谢谢。虽然能执行了,但是结果不正确,没时间延迟,并且柱形条高度变了。我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?引用3楼p2227的回复:
又想到一个思路JScriptcodeArray.prototype.swap=function(a,b){varthat=this;setTimeout(function(){vartmp=that[a];that[a]=that[b];that[b]=tmp;document.getElementById("div"+a).style.width……
解决方案七:
引用4楼toctan的回复:
谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?引用2楼zell419的回复:应该是this引起的。你把this[a]this[b]都先放到外面来。
Array.prototype.swap=function(a,b){setTimeout(function(){vartmp=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);}
这样也不行?
解决方案八:
不行也。没法暂停……引用6楼p2227的回复:
引用4楼toctan的回复:谢谢。怎么放外面来?我想隔一段时间执行一条语句,等这语句执行完毕再执行下一条应该怎么写啊?setTimeout是异步函数,应该不能实现这功能吧?有什么办法么?引用2楼zell419的回复:应该是this引起的。你把this[a]this[b]都先放到外面来。JScriptcodeArray.prototyp……