向setTimeout()传递函数参数(包括传递对象参数)

  由于需要,我要用到setTimeout()并且在里边的函数参数传递一个参数,就像这样setTimeout("fun(参数)", 1000)。但是以我这种写法,js会报错,说‘参数’未定义。于是,上网查找了一下,用了另一种写法setTimeout("fun("+参数+")", 1000),还是不行,但是以上写法在传递form表单的textarea是可以的,比如hml是这样:

1 <body>
2 <div class="main">
3 <div id="showpane" class="showpane"> </div>
4 <div class="textarea">
5 <form method="post" action="" name="sform">
6 <textarea name="txtara"></textarea>
7 <div>
8 <input type="submit" name="subt" value="send" onclick="doAjax(sform.txtara.value);return false;"/>
9 </div>
10 </form>
11 </div>
12 </div>
13 </body>

 

 

 

在js里边我可以这样子写:

    setTimeout("doAjax(document.sform.txtara.value )", 1000);

但是一旦要传递其他什么参数或者是对象参数,按照网上提供的方法就是要重写这个函数了。

经过研究和实践,我自己改进了方法,大家可以参考借鉴一下,我只是依据我的个人需要,其他情况我也不能保证,请多多指教!

 

 

1 <body>
2 <div class="main">
3 <div id="showpane" class="showpane">
4 </div>
5 <div class="textarea">
6 <form method="post" action="" name="sform">
7 <textarea name="txtara"></textarea>
8 <div>
9 <input type="submit" name="subt" value="send" onclick="doAjax(sform.txtara.value, this);return false;"/>
10 </div>
11 </form>
12 </div>
13 </div>
14 </body>

 

 

 

JavaScript:

 

1 function initAjax() {
2 var httprequest=null;
3 try {
4 httprequest=new ActiveXObject("Msxml2.XMLHTTP");
5 }
6 catch (e) {
7 try {
8 httprequest=new ActiveXObject("Microsoft.XMLHTTP");
9 }
10 catch (e) {
11 try {
12 httprequest=new XMLHttpRequest();
13 }
14 catch (e) {
15 httprequest=null;
16 }
17 }
18 }
19 return httprequest;
20 }
21 function doAjax( msg, obj ) {
22 var obj=obj; //主要是这一行
23   alert( obj.value);
24 var he="he="+msg;
25 var ajaxrequest=initAjax();
26 ajaxrequest.open("POST", "abc.jsp", true);
27 ajaxrequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
28 ajaxrequest.send(he);
29 ajaxrequest.onreadystatechange=function() {
30 if (ajaxrequest.readyState==4) {
31 if (ajaxrequest.status==200) {
32 document.getElementById("showpane").innerHTML=ajaxrequest.responseText;
33 }
34 else {
35 doAjax( msg );
36 }
37 }
38 }
39 setTimeout("doAjax(document.sform.txtara.value,document.all["+obj.sourceIndex+"])", 100);//还有这一行
40   }

 

就这样,我解决了对象参数传递的问题,最后想说一句,能有更好的解决方法请作评论提出来,本人乐意与志同道合者学习!

posted on 2010-04-06 00:09  /kq求学者  阅读(1255)  评论(0)    收藏  举报