2011-02-24 72 views
3

我希望在幾秒鐘不活動後使用觸發提交的表單(使用onKeyup事件)。setTimeout不會等待指定的毫秒數

我的代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
     <title>Title</title> 
    </head> 
    <body> 
     <form id="getJSONForm"> 
      <textarea rows="1" cols="10" onKeyUp="onKeyUp()"></textarea> 
      <input type="submit" value="Submit" id="getJSON" /> 
     </form> 

     <div id="result" class="functions"></div> 

     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $.ajaxSetup ({ 
       cache: false 
      }); 

      var timer; 

      function onKeyUp() { 
       stoper(); 
       timer = setTimeout ($("#getJSONForm").submit(), 10000); 
      } 

      function stoper() { 
       clearTimeout(timer); 
      } 

      $("#getJSONForm").submit(function(){ 
        $("#result").html("hello"); 
        return false; 
      }); 
     </script> 
    </body> 
</html> 

但是......形式獲取每onKeyUp事件似乎提交。它不會等待計時器達到指定的10,000毫秒。 有沒有辦法解決這個問題?

回答

7

setTimeout()的第一個參數需要是函數對象(或字符串,但不應該使用它)。就像這樣:

timer = setTimeout(function() { 
    $("#getJSONForm").submit(); 
}, 10000); 

您正在傳遞的$("#getJSONForm").submit()setTimeout()的價值,這可能不是你想要的。

除此之外,我會建議使用jQuery的事件處理,而不是HTML參數。它更加優雅,靈活且易於維護。你可以這樣說:

$('#getJSONForm textarea').keyup(function() { 
    // the content of your onKeyUp() function goes here 
}); 

對此話題看看the API documentation

+0

它的工作原理。非常感謝你。 – tucson