2014-11-26 4 views
1

작은 프로그램이 있는데, "항목"을 클릭하면 편집 모드가 열리고 다른 사용자는 잠겨 있습니다. 10 초마다 테이블의 타임 스탬프를 업데이트하라는 ajax 요청을 보냅니다.자바 스크립트를 여러 번 사용하고 clearInterval을

$(".entry-edit").click(function() { 
    // code 

    loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000); 

    // code 
}); 

그런 다음 테이블의 타임 스탬프를 0으로 업데이트하고 간격을 지우는 취소 단추가 있습니다.

나는이 시도가 ...
$(".entry-cancel").click(function() { 
    // code 

    clearInterval(loopLockingVar); 

    // code 
}); 

그것은 모든 작품

은 하나의 항목을 편집 할 때,하지만 두 개 이상 동시에 처리하는 경우, 다음 추가의 첫 번째 항목에 대한 간격을 취소 클릭 :

를 취소하고 다시 편집를 클릭하면
var loopLockingVar; 
$(".entry-edit").click(function() { 
    // code 

    if(! loopLockingVar) { 
    loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000); 
    } 

    // code 
}); 

그러나,이 같은 변수에 여러 간격 ID를 할당하고 ...

+0

HTML도 함께 입력하십시오. jsFiddle 또는 jsBin에서 문제를 재현 할 수 있다면 더 좋을 것입니다. –

+0

간격 ID 배열 – InferOn

답변

3

더 많은 일을하지 않는 것입니다 오 마지막에 할당 된 간격 ID를 유지합니다. 간격을 지우면 해당 ID에 해당하는 간격 만 지워집니다.

간단한 해결책은 간격 ID의 배열을 유지 한 다음 배열에 표시된 모든 간격을 지우는 것입니다. 코드는 다음과 같이 표시 될 수 있습니다.

var intervalIds = []; 

$(".entry-edit").click(function() { 
    intervalIds.push(setInterval(function() { loopLockingFunction(id) }, 10000)); 
}); 

$(".entry-cancel").click(function() { 
    for (var i=0; i < intervalIds.length; i++) { 
     clearInterval(intervalIds[i]); 
    } 
}); 
+0

을 사용할 수 있습니까? 그가 겹쳐 쓰는 간격이 아니고, 마지막 것만이 처음에 설정되어 있습니까? – Alexus

+0

@Alexus 매번 새로운 간격이 만들어지고 ID가 변수에 할당됩니다. 간격 자체는 변수의 간격 ID 값만 덮어 쓰지 않습니다. –

+0

그래서 변수는 간격에 대한 포인터 일 뿐이며 간격을 설정 해제하는 데 사용할 수 있습니다. 그러나 포인터가 변경되면 간격은 계속 실행됩니까? – Alexus

0

아마도 이런 식으로 시도 할 수 있습니다.

var loopLockingVar;

$(".entry-edit").click(loopLockingVar,function() { 
    // code 

    loopLockingVar = setInterval(function() { loopLockingFunction(id) }, 10000); 

    // code 
});