2010-02-03 10 views
1

자바 스크립트에 일종의 이벤트 리스너가 있습니까?자바 스크립트의 이벤트 리스너

내 시나리오 : Inc 함수를 다른 매개 변수로 두 번 실행하려면 Inc의 첫 번째 실행과 두 번째 실행이 필요하지만 두 번째 실행은 첫 번째 실행 후 X 초 (settimeout ...) 이후에 실행되어야합니다. Inc 함수는 이 완료되어 (모든 iterations, 즉 clearInterval이 됨)입니다.

그래서 이벤트와 리스너가 필요합니다 (물론 비동기이어야합니다).
무엇을 제안 할 수 있습니까? (제발 더 JQuery와 ...)

function Inc(val1,val2){        
    var intervalID = setInterval(function(){ 
      if (val1 > val2) clearInterval(intervalID); 
      val1= val1 + 10;       
     }, 400); 

} 
+0

번호, 문서 및 일부 DOM 요소 (onclick을, 온로드,으로 onUnload 등)하지만 당신은을 통해 "진짜"이벤트 핸들러의 기능을 모방해야 다른 수단. – glomad

답변

1

편집 : 나는 당신이 계속에 대해 알고 싶어하지 않는 이유를 알고하지 않기 때문에 글쎄, 여기에 동일한 의미하지만 어쩌면 바람직한 구문 또 다른 제안이다, 지금은 이벤트의 시뮬레이션이 대표 어쨌든 :) (일이 어떻게 든 완료를보고 할 Inc의 기능을 필요로한다) :

function Inc(val1,val2){ 
    var handle = { oncomplete: null }; 

    var intervalID = setInterval(function(){ 

     if (val1 > val2) 
     { 
      clearInterval(intervalID); 
      if (handle.oncomplete) handle.oncomplete(); 
     } 

     val1 = val1 + 10; 

    }, 400); 

    return handle; 
} 

Inc(10, 40).oncomplete = function(){ alert("Finish"); }; 

이전 :이 같은 뭔가 트릭에 (그래도 난 그것을 테스트하지 않았다)해야합니다

function Inc(val1,val2, continuation){        
var intervalID = setInterval(function(){ 
    if (val1 > val2) 
    { 
    clearInterval(intervalID); 
    if (continuation) continuation(); 
    } 

    val1 = val1 + 10;       
}, 400); } 

는 다음과 같이 호출 :

Inc(x, y, function(){ Inc(y, z); }); 
+0

하지만이 경우 Inc는 두 번째 Inc (익명이지만 여전히 알고 있음)에 대해 "아는"나는 그것을 원하지 않습니다. – luppi

+0

새로운 제안을 추가했지만 지금은 핸들을 반환해야하므로 큰 해결책은 아닙니다. –

+0

예, 가능합니다. 덕분에 – luppi

0

는 AFAIK 위하여 표준화 사용자 정의 이벤트 처리의 어떤 유형이없는,하지만 당신은 해결 방법하고 있습니다. 는 "위임"이 방법으로 호출

:

var myFunction = function() { 
    // CALL Inc with different params, this is your "event" 
}; 

function Inc(val1, val2) { 
    setInterval(myFunction,400); 
} 

짧은 대답이 아닌 사용자 정의 이벤트 (전용 DOM 표준 이벤트)에 대한,하지만 당신은 가짜 수 있습니다.

2

나는 보통 재귀를 필요로 뭔가를 다루는 특히, 시간 제한 멀리하려고합니다.

하지만 함수가 두 번만 실행되는 경우 재귀가 필요한 이유는 무엇입니까? 이 창에서 이벤트에 대한 몇 가지 기본 이벤트 핸들러에 첨부 할 수 있습니다

// call Inc the first time 
Inc(); 

// this will execute only after the first Inc(); is done. 
// call Inc the second time after X seconds 
setTimeout(Inc, 400); 
+0

Inc foo는 애니메이션입니다 (코드가 더 많습니다). 그래서 setinterval이 필요합니다. – luppi

+0

처음 엔 Inc를 실행하여 한 방향으로 요소를 애니메이션 한 다음 x 초 후에 동일한 inc를 사용하여 다른 방향으로 객체를 움직입니다. – luppi