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

问题描述

这是我写的排序代码(不同高度的柱形条)的一部分,就是交换两个数字的位置,排序正常。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……

时间: 2024-10-01 10:17:42

setTimeout()延迟执行问题,求教的相关文章

js函数setTimeout延迟执行的简单介绍

设置指定的JS函数在指定的时间后执行,可以利用setTimeout()函数.   setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code,millisec) 参数: code (必需):要调用的函数后要执行的 JavaScript 代码串. millisec(必需):在执行代码前需等待的毫秒数. 提示: setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 s

js函数setTimeout延迟执行的简单介绍_javascript技巧

setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code,millisec) 参数: code (必需):要调用的函数后要执行的 JavaScript 代码串. millisec(必需):在执行代码前需等待的毫秒数. 提示: setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout().实例: 复制代码 代码如下: function timed

JS页面延迟执行一些方法(整理)_javascript技巧

一般在JS页面延迟执行一些方法.可以使用以下的方法 jQuery.delay()方法简介 http://shawphy.com/2010/11/jquery-delay.html jQuery中queue和dequeue的用法 http://www.jb51.net/article/25481.htm Window.setTimeout http://www.jb51.net/article/20741.htm以下是我用到的一些例子. 复制代码 代码如下: //延迟查询,传一个查询btn的ID,

jQuery延迟执行的实现方法_jquery

本文实例讲述了jQuery延迟执行的实现方法.分享给大家供大家参考,具体如下: 做一个控件时碰到的一些无法同步处理的事件,可以用这样的延迟方法. <html> <script src="js/jquery.js"></script> <script> $(function(){ $('#test').bind("click",function(){ setTimeout(function(){alert($('#tes

js延迟执行函数

问题描述 延迟执行函数为什么进不去呢,哪里写错了?两个参数都是固定的setTimeout("mergeCellsByField('dataList','hightdevicenumber');",2000);function mergeCellsByField(tableID,colList){ alert(tableID + '-' + colList);} 解决方案 setTimeout(function(){mergeCellsByField(tableID,colList);}

Linq学习(7) 延迟执行 &amp;amp; 查询非泛型集合

本篇介绍Linq的延迟执行和查询非泛型集合. 延迟执行 从Linq的查询过程看,不断有新类型.集合的构建.释放,感觉效率不高,但Linq的延迟执行机制将大大改善常规操作加载整个数据源导致的效率低下的状况. 示例: static void Main() { int[] collection = { 10, 11, 12, 13, 14 }; Console.WriteLine("Begin query collection:" + DateTime.Now); var result =

android-timer.scheduleAtFixedRate 不延迟执行

问题描述 timer.scheduleAtFixedRate 不延迟执行 我使用计时器如下: Timer timer = new Timer(); timer.scheduleAtFixedRate(new CheckWifi(), 0, 50000); // 5 seconds class Wifi extends BroadcastReceiver { protected class CheckWifi extends TimerTask { @Override public void ru

iOS延迟执行方法详解_IOS

近日学习了延迟执行的几种方法,分享一下. 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 延迟执行代码: - (void)delayDo : (id)sender { NSLog(@"do:%@",sender); } 1.performSelector(NSObject)方法 这是iOS中常用的一种延迟执行方法. 特点:这个方法必须要在主线程中使用.可以传递参数.可以取消操作,不能暂停.

对比分析iOS延迟执行的4种方式_IOS

最近学习了延迟执行的几种方法,分享一下: 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 一.performSelector方法: 复制代码 代码如下: [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 1.特点: 此方式要求必须在主线程中执行,否则无效. 是一种非阻塞的执行方式, 暂时未找到取