2014-02-13 1 views
0

이것은 첫 번째 질문이므로 인내심을 가져주십시오.DOM setInterval이 document.ready에는로드되지만 함수 호출에는로드되지 않습니다.

나는 나의 과정을 연습하고있다. setInterval 객체를 인스턴스화하는 Scheduler를 호출해야합니다. jQuery에서 인스턴스화하면 모두 정상적으로 실행되지만 함수에서 호출하면 간격이 시작되지 않습니다. 나는 다른 행동의 이유를 이해할 수 없다. 어떤 아이디어?

"서버 측에서"실행중인 node.js/express 서버가 있지만이 컨텍스트에는 적합하지 않습니다.

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript"> 

    var ResetableScheduler = function(callback, miliseconds, data){ 
     var handler; 
     this.start = function(){ 
      handler = setInterval(function(){callback(data + "\t(" + miliseconds + ")")}, miliseconds); 
     } 

     this.reset = function(newdata){ 
      clearInterval(handler); 
      handler = setInterval(function(){callback(newdata + "\t(" + miliseconds + ")")}, miliseconds); 
     } 

     this.stop = function(){ 
      clearInterval(handler); 
     } 
    } 

      // runs fine 
    //$(function(){ 
    // var rs = new ResetableScheduler(doTranslate_pt_en_2, 200, "Hello");  
     //rs.start(); 
     //setTimeout(function() { rs.reset("JavaScript"); }, 2500); 
     //setTimeout(function() { rs.stop(); }, 6000); 
    //}); 

    function doTranslate_pt_en_2(text){ 
     console.log("text = " + text); 
    } 

      // prints begin and then nothing... 
    function begin(text) 
    { 
     console.log("begin"); 
     var rs = new ResetableScheduler(doTranslate_pt_en_2, 200, "Hello");  
     rs.start(); 
    } 

</script> 
</head> 
<body> 
    <div> 
     <form method="post" action="/api/translate/pt/en"> 
      <input type="textbox" id="originaltext" name="originaltext"> 
      <input type="submit" id="translate-btn" onclick="begin(originaltext)" label="traduzir"> 
     </form> 

     <input type="textbox" id="translatedtext" placeholder="<%= result %>"> 
    </div> 
    </body> 
    </html> 
+0

사용자가 "제출"버튼을 클릭하면 '

'이 제출되고 서버의 응답과 함께 페이지가 다시로드됩니다. 페이지를 새로 고침하면 모든 것이 재설정됩니다. – Pointy

+0

그래서이 동작은 양식 제출 때문에 발생합니다. 만약 폼이없는 버튼이 있었다면 기능이 올바르게 작동 할 것이라고 생각합니까? –

+0

예 - "onclick"핸들러도 수정해야합니다. 문자열을 전달하려면 'onclick = "begin ('message ')"' – Pointy

답변

1

형태의 submit 이벤트로 인스턴스화 코드를 첨부 :이 경우

$('form').on('submit', function(e) { 
    //e.preventDefault(); 
    var rs = new ResetableScheduler(doTranslate_pt_en_2, 200, "Hello");  
     rs.start(); 
}); 

, 당신은 당신이에 부착 한 onclick 코드를 제거 할 수 있습니다 여기에

내 HTML입니다 제출 버튼.

+0

고맙습니다. 코드를 시도했지만 요점을 볼 수는 있지만 작동하지 않습니다. 동작은 동일합니다. –

관련 문제