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进行四舍五入方法汇总
Dec 16 Javascript
JS实现下拉菜单赋值到文本框的方法
Aug 18 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
Jun 01 Javascript
AngularJS辅助库browserTrigger用法示例
Nov 03 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
Dec 23 Javascript
微信小程序 自定义对话框实例详解
Jan 20 Javascript
微信小程序Flex布局用法深入浅出分析
Apr 25 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
Apr 28 Javascript
如何在现代JavaScript中编写异步任务
Jan 31 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
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
关于vue面试题汇总
2018/03/20 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
jQuery中实现text()的方法
2019/04/04 jQuery
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
Python实现读取json文件到excel表
2017/11/18 Python
flask框架视图函数用法示例
2018/07/19 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
仓库保管员岗位职责
2013/12/20 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
安全月活动总结
2014/05/05 职场文书
中学教师师德承诺书
2014/05/23 职场文书
群众路线领导对照材料
2014/08/23 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
使用Pytorch训练two-head网络的操作
2021/05/28 Python