2013-07-13 65 views
0
<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>  
+2

'foo(bar())'做了什麼?對。那麼'setTimeout(doneTyping(),interval)'做了什麼? –

+0

@RaymondChen它是 – ses

回答

6

您正在立即調用該函數並將其結果(未定義)傳遞給setTimeout()。您需要doneTyping後一個函數引用傳遞給setTimeout(),在這種情況下,你會做通過刪除括號:

typingTimer = setTimeout(doneTyping, doneTypingInterval); 

或(不適用於您的例子,但備查),如果你需要打電話一些參數的函數,說你想在指定的時間間隔之後調用doneTyping('test'),你可以包裝在一個匿名函數表達式:

typingTimer = setTimeout(function() { doneTyping('test'); }, doneTypingInterval); 

ONLINE DEMO

P.S.間接與你的要求,我建議也移動clearTimeout()keyup處理程序,只是setTimeout()之前,除去​​處理器,something like this,否則你可能會發現你有兩個或更多的超時一次設置,因爲輸入一個大寫字母順序是(1)向下移動(2)字母向下(3)字母向上移動(4)向上移動。即使沒有使用shift鍵,當快速打字時,我經常發現在輸入下一個字母之前我沒有完全釋放一個鍵,所以我在相應的keyup事件之前連續發生了一個以上的​​事件 - 這沒有明顯的不良影響在正常情況下,但是在代碼響應向下和向上事件時會顯着。

+0

感謝您添加演示@ Ken-AbdiasSoftware。 – nnnnnn

相關問題