jquery中settimeout與setInterval使用時的注意事項

來源:互聯網
上載者:User

以前寫定時器的時候,總是習慣直接 

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(值)}。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.