js setTimeout 参数传递使用介绍


Posted in Javascript onAugust 13, 2013

window.settimeout()方法要调用带参数的函数有两种方法:
1.

function init(){ 
var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); 
//alert(url); 
window.setTimeout(function(){ searchJDWater(url);},100); 
}

2.
function init(){ 
var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); 
//alert(url); 
window.setTimeout(“searchJDWater(”+url+“)”, 100); 
}

注意: 带参数方法使用setTimeout要注意,setTimeout("函数名("+参数+")",毫秒数),这里的参数只能是字符串形式的,而不能传递一个对象
---------------------------
以下的方法是错误的,而且浏览器状态栏会提示参数无效:
function init(){ 
var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); 
//alert(url); 
window.setTimeout(searchJDWater(url), 100); 
}

--------------------------------------------------------------
settimeout()函数扩展:
网上很多朋友也在问此类问题,我在此说明下,以下我举几个个简单的例子:

网上查找下“带参数 setTimeout”,很多朋友写了很多方法来实现使用setTimeout带对象的方法循环,例如:

<script language="javascript"> 

var __sto = setTimeout; 

window.setTimeout = function(callback,timeout,param) 

{ 

var args = Array.prototype.slice.call(arguments,2); 

var _cb = function() 

{ 

callback.apply(null,args); 

} 

__sto(_cb,timeout); 

} 

//测试代码 

function aaaa(a) 

{ 

alert(a); 

} 

function aaaaa(a,b,c) 

{ 

alert(a + b + c); 

} 

var a = new Object(); 

window.setTimeout(aaaa,1000,a); 

window.setTimeout(aaaaa,2000,a,6,7); 

</script>

此例中,setTimeout用法,setTimeout(回调函数,时间,参数1,...,参数n)。

又例如:

2:

<script type="text/javascript"> 

var _st = window.setTimeout; 

window.setTimeout = function(fRef, mDelay) { 

if(typeof fRef == 'function'){ 

var argu = Array.prototype.slice.call(arguments,2); 

var f = (function(){ fRef.apply(null, argu); }); 

return _st(f, mDelay); 

} 

return _st(fRef,mDelay); 

} 

function test(x){ 

alert(x); 

} 

window.setTimeout(test,1000,'fason'); 

</script>

此例中,重载了一下window.setTimeout,用apply去回调前面的function。

例1:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test("+ obj +")",1000); 

} 

</script> 

<input id="testButton" type="button" onclick="test(1)">

当鼠标按下此按钮时调用test(),将"1"传递进去,屏幕上每隔1000毫秒(1秒)弹出一次对话框,显示1,没问题。

例2:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test("+ obj +")",1000); 

} 

</script> 

<input id="btnTest" type="button" onclick="test(this)">

这里的this可以当做document.getElementById("btnTest")来理解,当鼠标按下此按钮时向test函数传递的是一个对象,屏幕显示[object],

1000毫秒之后不再显示第二次。问题来了,浏览器左下报脚本错误,详细信息里显示object未定义。

例3:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test()",1000); 

} 

</script> 

<input id="testButton" type="button" onclick="test(this)">

setTimeout里的test()没带参数,第一次显示[object],1000毫秒之后显示undefined,变量尚未赋值,也就是说用此方式可以实现带参数的方

法循环,但是参数被销毁。

其实这很简单就可以实现,不必写那么长的代码来实现。

例4:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test('"+ obj +"')",1000); 

} 

</script> 

<input id="testButton" type="button" onclick="test(this)">

注意,setTimeout里的test中的参数obj前后的引号,在双引号内有一对单引号,这样:setTimeout("test(单引号双引号+obj+双引号单引

号)"),行了吧~每隔1000毫秒屏幕显示一次[object],传递对象成功。

———————————————————————————————————————

疑义:第4条 最终传走的是“对象”的字符串“object” 而不是初始的对象obj。只是obj的类型而已。并没有达到传递对象的作用。

可以测试一下代码: 弹出传来对象的id

<body> 

<div id="sssss"></div> 

</body> 

<script language="javascript"> 

obj=document.getElementById('sssss'); 

function test(obj) 

{ 

alert(obj.id); 

setTimeout("test('"+ obj +"')",1000); 

} 

test(obj) 

</script>
Javascript 相关文章推荐
Javascript 不能释放内存.
Sep 07 Javascript
JavaScript 在各个浏览器中执行的耐性
Apr 06 Javascript
Javascript 刷新全集常用代码
Nov 22 Javascript
javascript css styleFloat和cssFloat
Mar 15 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
JS从一组数据中找到指定的单条数据的方法
Jun 02 Javascript
node安装--linux下的快速安装教程
Mar 21 Javascript
实现jquery放大镜的两种方法
Feb 22 jQuery
Nuxt.js SSR与权限验证的实现
Nov 21 Javascript
AngularJS实现的自定义过滤器简单示例
Feb 02 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
js setTimeout 常见问题小结
Aug 13 #Javascript
删除select中所有option选项jquery代码
Aug 12 #Javascript
js获取本机的外网/广域网ip地址完整源码
Aug 12 #Javascript
JavaScript解析URL参数示例代码
Aug 12 #Javascript
JS实现Enter键跳转及控件获得焦点
Aug 12 #Javascript
获取数组中最大最小值方法js代码(自写)
Aug 12 #Javascript
使用js对select动态添加和删除OPTION示例代码
Aug 12 #Javascript
You might like
笑谈配置,使用Smarty技术
2007/01/04 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
python Celery定时任务的示例
2018/03/13 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
公证委托书大全
2014/04/04 职场文书
大专毕业生求职信
2014/07/05 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书