2011-02-24 8 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

관련 문제