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 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
jquery插件制作 表单验证实现代码
Aug 17 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
Oct 09 Javascript
九种原生js动画效果
Nov 11 Javascript
JavaScript中的对象继承关系
Aug 01 Javascript
Javascript继承机制详解
May 30 Javascript
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 Javascript
js单页hash路由原理与应用实战详解
Aug 14 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
Koa2 之文件上传下载的示例代码
Mar 29 Javascript
详解Vue.js 响应接口
Jul 04 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
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python 文件和输入输出小结
2013/10/09 Python
详解Python 解压缩文件
2019/04/09 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python——全排列数的生成方式
2020/02/26 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
《雾凇》教学反思
2014/02/17 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
匿名信格式范文
2015/05/27 职场文书
工程进度款催款函
2015/06/24 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
MySQL分区表管理命令汇总
2022/03/21 MySQL