2011-02-24 6 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); 

あなたは現在、あなたが望むものはおそらくないsetTimeout()から$("#getJSONForm").submit()の値を、渡しています。

さらに、HTML引数の代わりにjQueryのイベント処理を使用することをお勧めします。それはよりエレガントで、柔軟で、維持しやすい方法です。あなたは次のようにすることができます:

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

このトピックについては、the API documentationをご覧ください。

+0

これは機能します。どうもありがとうございました。 – tucson

関連する問題