setTimeout

setTimeout

setTimeout 方法用於在指定的毫秒數後調用函式或計算表達式。

語法

setTimeout(code,millisec)

var t = setTimeout("javascript語句", 毫秒)

setTimeout() 方法會返回某個值。在上面的語句中,值被儲存在名為 t 的變數中。假如你希望取消這個 setTimeout(),你可以使用這個變數名來指定它。

setTimeout() 的第一個參數是含有 JavaScript 語句的字元串。這個語句可能諸如 "alert('5 seconds!')",或者對函式的調用,諸如 alertMsg()"。

第二個參數指示從當前起多少毫秒後執行第一個參數。

參數

code (必需):要調用的函式後要執行的 JavaScript 代碼串。

millisec(必需):在執行代碼前需等待的毫秒數。

提示

setTimeout() 只執行 code 一次。如果要多次調用,請使用 setInterval() 或者讓 code 自身再次調用 setTimeout()。

實例

實例1:

<html>

<head>

<script type="text/javascript">

function timedMsg()

{

var t=setTimeout("alert('5 seconds!')",5000)

}

</script>

</head>

<body>

<form>

<input type="button" value="Display timed alertbox!" onClick="timedMsg()">

</form>

<p>Click on the button above. An alert box will be displayed after 5 seconds.</p>

</body>

</html>

實例2:

function clockon(bgclock){

var now=new Date();

var year=now.getYear();

var month=now.getMonth();

var date=now.getDate();

var day=now.getDay();

var hour=now.getHours();

var minu=now.getMinutes();

var sec=now.getSeconds();

var week;

month=month+1;

if(month<10) month="0"+month;

if(date<10) date="0"+date;

if(hour<10) hour="0"+hour;

if(minu<10) minu="0"+minu;

if(sec<10) sec="0"+sec;

switch (day){

case 1:

week="星期一";

break;

case 2:

week="星期二";

break;

case 3:

week="星期三";

break;

case 4:

week="星期四";

break;

case 5:

week="星期五";

break;

case 6:

week="星期六";

break;

default:

week="星期日"

break;

}

var time="";

time=year+"年"+month+"月"+date+"日 "+week+" "+hour+":"+minu+":"+sec;

if(document.all){

bgclock.innerHTML="系統公告:["+time+"]"

}

var timer=setTimeout("clockon("+ bgclock +")",200);

}

帶參數方法使用setTimeout要注意,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)。

又例如:

<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>

第一次彈出了ID 第2次開始未定義。對象傳遞不成功

指定時間跳轉到目標頁面:

setTimeout("location="index.asp"",2000);

setTimeout調用無參數的函式時候不要寫上括弧否則頁面一載入完就會直接執行函式,如

<script>

setTimeout(test,3000);

function test(){

alert("hello world");

}

</script>

setTimeout調用有參數的可以有以下兩種寫法

1.

<script>

setTimeout(test,3000,'小莊');

function test(obj){

alert("hello,"+obj);

}

</script>

2.

<script>

setTimeout(function(){test('小莊')},3000);

function test(obj){

alert("hello,"+obj);

}

</script>

實例 三 無窮循環

要創建一個運行於無窮循環中的計時器,我們需要編寫一個函式來調用其自身。在下面的例子中,當按鈕被點擊後,輸入域便從 0 開始計數。

<html>

<head>

<script type="text/javascript">

var c = 0var tfunction timedCount()

{ document.getElementById('txt').value = c; c = c + 1; t = setTimeout("timedCount()", 1000); } </script>

</head>

<body>

<form> <input type="button" value="Start count!" onClick="timedCount()"> <input type="text" id="txt">

</form>

</body>

</html>

語法一

var timeoutID = setTimeout(func, delay, [param1, param2, ...]);

參數說明:

func 調用方法的引用

delay延時

[param1, param2, ...] 對調用方法傳入的參數

返回值:

timeout的id

相關詞條

相關搜尋

熱門詞條

聯絡我們