javascript setTimeout()傳遞函數參數(包括傳遞對象參數)
更新時間:2010年04月07日 12:03:49 作者:
由于需要,我要用到setTimeout()并且在里邊的函數參數傳遞一個參數,就像這樣setTimeout("fun(參數)", 1000)。但是以我這種寫法,js會報錯,說‘參數’未定義。
于是,上網查找了一下,用了另一種寫法setTimeout("fun("+參數+")", 1000),還是不行,但是以上寫法在傳遞form表單的textarea是可以的,比如hml是這樣:
<body>
<div class="main">
<div id="showpane" class="showpane"> </div>
<div class="textarea">
<form method="post" action="" name="sform">
<textarea name="txtara"></textarea>
<div>
<input type="submit" name="subt" value="send" onclick="doAjax(sform.txtara.value);return false;"/>
</div>
</form>
</div>
</div>
</body>
在js里邊我可以這樣子寫:
setTimeout("doAjax(document.sform.txtara.value )", 1000);
但是一旦要傳遞其他什么參數或者是對象參數,按照網上提供的方法就是要重寫這個函數了。
經過研究和實踐,我自己改進了方法,大家可以參考借鑒一下,我只是依據我的個人需要,其他情況我也不能保證,請多多指教!
<body>
<div class="main">
<div id="showpane" class="showpane">
</div>
<div class="textarea">
<form method="post" action="" name="sform">
<textarea name="txtara"></textarea>
<div>
<input type="submit" name="subt" value="send" onclick="doAjax(sform.txtara.value, this);return false;"/>
</div>
</form>
</div>
</div>
</body>
JavaScript:
function initAjax() {
var httprequest=null;
try {
httprequest=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httprequest=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
try {
httprequest=new XMLHttpRequest();
}
catch (e) {
httprequest=null;
}
}
}
return httprequest;
}
function doAjax( msg, obj ) {
var obj=obj; //主要是這一行
alert( obj.value);
var he="he="+msg;
var ajaxrequest=initAjax();
ajaxrequest.open("POST", "abc.jsp", true);
ajaxrequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
ajaxrequest.send(he);
ajaxrequest.onreadystatechange=function() {
if (ajaxrequest.readyState==4) {
if (ajaxrequest.status==200) {
document.getElementById("showpane").innerHTML=ajaxrequest.responseText;
}
else {
doAjax( msg );
}
}
}
setTimeout("doAjax(document.sform.txtara.value,document.all["+obj.sourceIndex+"])", 100);//還有這一行
}
就這樣,我解決了對象參數傳遞的問題,最后想說一句,能有更好的解決方法請作評論提出來,本人樂意與志同道合者學習!
復制代碼 代碼如下:
<body>
<div class="main">
<div id="showpane" class="showpane"> </div>
<div class="textarea">
<form method="post" action="" name="sform">
<textarea name="txtara"></textarea>
<div>
<input type="submit" name="subt" value="send" onclick="doAjax(sform.txtara.value);return false;"/>
</div>
</form>
</div>
</div>
</body>
在js里邊我可以這樣子寫:
setTimeout("doAjax(document.sform.txtara.value )", 1000);
但是一旦要傳遞其他什么參數或者是對象參數,按照網上提供的方法就是要重寫這個函數了。
經過研究和實踐,我自己改進了方法,大家可以參考借鑒一下,我只是依據我的個人需要,其他情況我也不能保證,請多多指教!
復制代碼 代碼如下:
<body>
<div class="main">
<div id="showpane" class="showpane">
</div>
<div class="textarea">
<form method="post" action="" name="sform">
<textarea name="txtara"></textarea>
<div>
<input type="submit" name="subt" value="send" onclick="doAjax(sform.txtara.value, this);return false;"/>
</div>
</form>
</div>
</div>
</body>
JavaScript:
復制代碼 代碼如下:
function initAjax() {
var httprequest=null;
try {
httprequest=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httprequest=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
try {
httprequest=new XMLHttpRequest();
}
catch (e) {
httprequest=null;
}
}
}
return httprequest;
}
function doAjax( msg, obj ) {
var obj=obj; //主要是這一行
alert( obj.value);
var he="he="+msg;
var ajaxrequest=initAjax();
ajaxrequest.open("POST", "abc.jsp", true);
ajaxrequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
ajaxrequest.send(he);
ajaxrequest.onreadystatechange=function() {
if (ajaxrequest.readyState==4) {
if (ajaxrequest.status==200) {
document.getElementById("showpane").innerHTML=ajaxrequest.responseText;
}
else {
doAjax( msg );
}
}
}
setTimeout("doAjax(document.sform.txtara.value,document.all["+obj.sourceIndex+"])", 100);//還有這一行
}
就這樣,我解決了對象參數傳遞的問題,最后想說一句,能有更好的解決方法請作評論提出來,本人樂意與志同道合者學習!
您可能感興趣的文章:
- 深入理解setTimeout函數和setInterval函數
- setTimeout函數兼容各主流瀏覽器運行執(zhí)行效果實例
- 解決火狐瀏覽器下JS setTimeout函數不兼容失效不執(zhí)行的方法
- jQuery setTimeout()函數使用方法
- js函數setTimeout延遲執(zhí)行的簡單介紹
- JS中setInterval、setTimeout不能傳遞帶參數的函數的解決方案
- js函數使用技巧之 setTimeout(function(){},0)
- 定時器(setTimeout/setInterval)調用帶參函數失效解決方法
- 給c#添加SetTimeout和SetInterval函數
- setTimeout函數的神奇使用
相關文章
js Element Traversal規(guī)范中的元素遍歷方法
對于元素間的空格,在IE9之前,都不會返回文檔節(jié)點,其它的所有瀏覽器都會返回文檔節(jié)點,為了兼容瀏覽器這間的差異,又不更改已有的DOM 標準,所以有了 Element Traversal 規(guī)范2018-04-04
原生js如何實現(xiàn)call,apply以及bind
這篇文章主要介紹了原生js實現(xiàn)call,apply以及bind,幫助大家更好的理解和學習使用JavaScript,感興趣的朋友可以了解下2021-04-04

