2017-10-01 16 views
0

그래서 내가 다른 function 매 2 트리거 주요 function이 내에서는 setTimeout() 루프를 중지 할 수 없습니다 - 17초을하지만 clearTimeout()으로 중지 할 때 그냥 계속 완전히 clearTimeout()를 무시합니다.어떻게 든

그래서이 내 주요 기능입니다 :

var itemTimer; 
var stopTimeout; 

function major(){ 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
} 

그리고 이것은 내 정지 시간 제한 기능입니다 :

function stopTimer() { 
    clearTimeout(itemTimer); 
    clearTimeout(stopTimeout); 
} 

+0

와 방법'stopTimer' 부릅니까? – Xufox

답변

1

을 도와 주셔서 감사합니다 귀하의 setTimeout() 잘못 호출되고; items()major()을 호출하고 있습니다. 대신 호출 할 함수로 전달해야합니다.

매개 변수에 대괄호를 전달하지 말고 매개 변수를 따옴표로 묶지 마십시오.

대신은 :

itemTimer = setTimeout('items()', itemTime);  
stopTimeout = setTimeout('major()',itemTime); 

당신이 찾고있는이 도움이

itemTimer = setTimeout(items, itemTime); 
stopTimeout = setTimeout(major, itemTime); 

희망을! :)

+1

'setTimeout (items, itemTime)'이 선호하는 문법이지만, 타임 아웃을 설정하는 두 가지 방법은 다소 비슷합니다. 이것은 문제가되지 않습니다. – Xufox

+0

@NichtEric - 신난다! 이렇게하여 문제가 해결되었다는 것을 확인한 후에는 아래의 회색 체크를 클릭하여 [** 승인 된 것으로 표시 **] (https://stackoverflow.com/help/someone-answers)를 잊지 마십시오. 투표 버튼 - 'Unanswered Questions'대기열에서 제거하고 질문 평론가와 질문 응답자 모두에게 평판을 부여합니다. 질문을 한 후 15 분 후에 그렇게 할 수 있습니다. 물론, 그 말을하면, 내 대답 (또는 다른 사람의 것)을 옳은 것으로 표시 할 의무가 없습니다. 문제를 해결하면 물건이 원활하게 흐르도록 도와 줍니 다. :) –

+0

Ok 이 사이트에 새로운 상대 : D –

1

시간 초과가 쌓여 있다고 생각합니다. major이 한 번 호출되자 마자 itemTimerstopTimeout 변수에 새로운 타임 아웃 참조가 다시 할당됩니다. 따라서 이전에 설정된 시간 제한을 지우는 방법은 없습니다. 이 경우에는 쉽게 해결해야합니다. 그냥 stopTimermajor에 매우 첫 번째 문 전화 :

function major(){ 
    stopTimer(); 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
}