<html>
<head>
<script src="jquery-1.9.0.min.js" type="text/javascript"></script>
</head>
<body>
<input id="input" type="text"/>
<script>
//setup before functions
var typingTimer; //timer identifier
var doneTypingInterval = 5000; //time in ms, 5 second for example
//on keyup, start the countdown
$('#input').keyup(function(){
typingTimer = setTimeout(doneTyping(), doneTypingInterval);
});
//on keydown, clear the countdown
$('#input').keydown(function(){
clearTimeout(typingTimer);
});
//user is "finished typing," do something
function doneTyping() {
alert("123") // I get this alert immidiatelly when typing, but not after 5 sec dalay
}
</script>
</body>
0
A
回答
6
您正在立即調用該函數並將其結果(未定義)傳遞給setTimeout()
。您需要doneTyping
後一個函數引用傳遞給setTimeout()
,在這種情況下,你會做通過刪除括號:
typingTimer = setTimeout(doneTyping, doneTypingInterval);
或(不適用於您的例子,但備查),如果你需要打電話一些參數的函數,說你想在指定的時間間隔之後調用doneTyping('test')
,你可以包裝在一個匿名函數表達式:
typingTimer = setTimeout(function() { doneTyping('test'); }, doneTypingInterval);
P.S.間接與你的要求,我建議也移動clearTimeout()
到keyup
處理程序,只是setTimeout()
之前,除去處理器,something like this,否則你可能會發現你有兩個或更多的超時一次設置,因爲輸入一個大寫字母順序是(1)向下移動(2)字母向下(3)字母向上移動(4)向上移動。即使沒有使用shift鍵,當快速打字時,我經常發現在輸入下一個字母之前我沒有完全釋放一個鍵,所以我在相應的keyup
事件之前連續發生了一個以上的事件 - 這沒有明顯的不良影響在正常情況下,但是在代碼響應向下和向上事件時會顯着。
+0
感謝您添加演示@ Ken-AbdiasSoftware。 – nnnnnn
相關問題
- 1. Spring sseEmitter,發送方法發送後不會立即發送事件
- 2. WM_TOUCH不會立即發送與觸發事件
- 3. KeyRelease事件不會發送
- 4. 爲什麼WeakEventManager在發送者不是名義值時不會觸發事件?
- 5. IEventBroker不會在java中發送事件
- 6. X在發送密鑰時會發送很多按鍵事件
- 7. Qt:立即啓動線程,不會延遲主事件循環
- 8. 爲什麼onbeforeunload事件不會觸發
- 9. 爲什麼LostFocus事件不會發生?
- 10. 爲什麼事件DOMContentReady不會發生?
- 11. 爲什麼DISPID_NEWPROCESS事件不會觸發?
- 12. 爲什麼TriggerComplete事件不會觸發?
- 13. 爲什麼React事件不會觸發?
- 14. 爲什麼ajax事件不會觸發?
- 15. 爲什麼DropDownList.SelectedIndexChanged事件不會觸發?
- 16. Facebook發送按鈕有效,但不會觸發'message.send'事件
- 17. 爲什麼改變輸入的事件不會用jQuery觸發?
- 18. 爲什麼AppointmentItem的發送事件會被多次調用?
- 19. Swift Socket.io在連接未執行後立即發送的事件
- 20. Javascript/jQuery:爲什麼焦點事件不會在輸入字段上觸發?
- 21. 第一次顯示控件後會立即發生什麼事件?
- 22. RestKit RKRequests不會立即發送
- 23. 爲什麼在Javascript中設置的onclick事件不會觸發?
- 24. Visual Studio 2008在發佈後事件之後會發生什麼事件?
- 25. Outlook集成 - 約會發送事件
- 26. 爲什麼在Ajax調用之後不會觸發jQuery事件?
- 27. 觸發事件延遲
- 28. 設置時間5秒來發送flex中的cairngorm事件
- 29. 在Outlook Interop(會議)中,在發送ItemSend之前和用戶點擊發送之後發生了什麼事件?
- 30. 的JavaScript onkeypress事件延遲的觸發
'foo(bar())'做了什麼?對。那麼'setTimeout(doneTyping(),interval)'做了什麼? –
@RaymondChen它是 – ses