關於setInterval、setTimeout在jQuery中的使用注意事項
setInterval("fn()",2000);
最近碰到個問題,在使用jquery寫定時器時,總是會出現fn不存在的錯誤提示,如下
$(function(){setInterval("fn()",2000);})
解決方法是去掉引號和括號,採用最原始的方法
$(function(){setInterval(fn,2000);})
另外一種就是在書寫jq的擴充套件,如下
程式碼如下:
$(function(){
$.extend({
fn:function(){
alert("im fn!");
}
});
setInterval("$.fn()",2000);
});
以上寫法都是沒什麼問題的。但是如果需要傳遞引數該如何?
像上面第一種寫法,
$(function(){setInterval(fn,2000);})
如果寫成
$(function(){setInterval(fn(para),2000);})
就報錯了。這個比較經典,比較白痴。
這時你可以內建一個function,寫成
$(function(){setInterval(function(){fn(para)},2000);})
這樣也是可以的。
至於第二種方法如何傳遞,這就更簡單了,我就不多說了。
發到部落格僅當記憶使用,都是基礎啊!也是初學者容易犯錯的地方!
//========================
還是補充下第二種傳參的方法。
先看段程式碼
複製程式碼
$(function(){
$start = 1;
$.extend({
a:function(t){
$index = t;
alert($index);
$start++;
}
});
setInterval("$.a("+$start+")",2000);
});
有一些人會嘗試這麼去寫,結果是什麼?結果就是alert出來的,一直是1,不會增加。這裡需要注意的是setInterval裡面的第一個引數,這是一個語句,用雙引號括了起來,裡面的東西會被解釋成變數。如果按照上面的寫法,相當於
setInterval("$.a(1)",2000);
那麼結果也就無可厚非了。正確的寫法,當然是這樣
程式碼如下:
$(function(){
$start = 1;
$.extend({
a:function(t){
$index = t;
alert($index);
$start++;
}
});
setInterval("$.a($start)",2000);
});
這時$start才會被解釋成變數。語句相當於function(){a(變數)},而不是function(){a(值)}。