2011-12-18 182 views
2

我試圖使用jQuery的setTimeout的,以調用一個方法每個x時間間隔:的setTimeout功能不能正常工作

$('.text').blur(function() { 
    doSmth(); 
}); 

$('.text').bind("paste", function (e) { 
    setTimeout(function() { 
     doSmth(); 
    }, 5); 
}); 

超時不工作,請指教!

+1

''setTimeout'只在給定的延遲後調用提供的函數*一次*在這裏解釋:https://developer.mozilla.org/en/DOM/window.setTimeout並且已經說過,'setTimeout '與jQuery無關。 – 2011-12-18 13:32:40

+1

這就是_Javascript_ – SLaks 2011-12-18 13:33:48

回答

2

你是什麼意思與「它不工作」?無論如何setTimeout()是一個JavaScript函數,只在指定的時間間隔後觸發一次。

如果你wan't觸發東西每五秒鐘你應該做的:

var interval = setInterval(doSmth, 5000); 

哪裏doSmth是其他地方5000定義的函數是間隔的毫秒數。如果喲想停止執行的只是做:

clearInterval(interval); 
+0

從我讀過的內容來看,避免setInterval通常是一個好主意,因爲您可以結束堆棧調用。我添加了一個答案,它使用setTimeout來調用一個函數,然後在函數結束時設置一個新的超時,在五秒內再次調用自己。這樣,你不能結束一堆電話。 – 2011-12-18 13:46:45

+0

它的工作原理:)...謝謝 – Echo 2011-12-18 17:44:48

1

首先,它不是「jQuery setTimeout」setTimeout是本地API的一部分,而不是jQuery的API。

二,我假設你想要5秒。目前您正在做5毫秒

$('.text').bind("paste", function(e) { 
    setTimeout(function() { 
     doSmth(); 
    }, 5000); 
}); 

代碼中5的持續時間太短而無法察覺。

+1

setTimeout只執行一次,你應該使用setInterval – 2011-12-18 13:35:30

+0

@NicolaPeluchetti:是的,我解釋*「每x時間間隔」*意思是每次發生事件時x的時間間隔。這並不完全清楚是什麼意思。 – RightSaidFred 2011-12-18 13:38:01

0

我看到其他用戶的答案setInterval的,但是從我讀過,你應該避免使用setInterval的,因爲你可以用的不是堆疊結束 - 可是執行的函數調用等

所以,你能做些什麼,而不是是這樣的:

var myTimeout; 
$('.text').bind("paste", function (e) { 
    function loopFunction() { 
     doSmth(); 
     myTimeout = setTimeout(loopFunction, 5000); 
    } 
    myTimeout = setTimeout(loopFunction, 5000); 
}); 

現在你有一個自稱每五秒鐘的功能。

+0

我已經更新了我的代碼根據你的方法仍然不會自己調用! :$('。sequenceStringArea')。blur(function(){ findMatchedGeneticFeature(); }); var myTimeout; $('。sequenceStringArea')。綁定( 「粘貼」,函數(E){ 函數loopFunction(){ findMatchedGeneticFeature(); myTimeout = setTimeout的(loopFunction,1000); } myTimeout = setTimeout的(loopFunction,1000); }); – Echo 2011-12-18 17:29:00

0

根據您的反饋,這裏是解決方案:

var interval = setInterval(doSmth, 5000); 


    $('.text').blur(function() { 
     doSmth(); 
    }); 

    $('.text').bind("paste", function(e) { 
     setTimeout(function() { 
      doSmth(); 
     }, 0); 
    }); 

感謝您的支持驚人。