2013-08-02 3 views
0

자동으로 변경되는 '회전하는'DIV를 만들려고합니다. JQuery를 사용하여 DIV의 내용을 변경하는 switchRotator (id) 함수가 있습니다. 다음은 오류를 일으키는 기능입니다 :함수가 정의되지 않은 오류입니다.

function launchTimedRotator(){ 

//timedSwitch is a boolean value that can be enabled/disabled with buttons 

if (timedSwitch) { 

    if (counter<2) { 
     counter++; 
    } else { 
     counter = 1; 
    } 

switchRotator(counter); 
setInterval("launchTimedRotator()",3000); 
return null; 
} 

}; 

당신은 내가 결국 자체에서 함수를 호출하여 재귀를 사용하기 위해 노력하고있어 볼 수 있듯이. 내가 구글 크롬의 개발자 도구에받을 오류 : catch되지 않은 오류 ReferenceError가 : launchTimedRotator가 setInterval()에서 문자열을 사용하여 미리

+0

함수가 전역이 아니므로 문자열을 전달할 때 필요합니다. 당신은'setInterval (launchTimedRotator, 3000);'을 할 수 있었지만, 왜 재귀? 동시에 실행되는 간격의 수는 기하 급수적으로 증가합니다. –

+0

"회 전자"중 하나에서 비슷한 개념을 본 후 재귀를 사용했습니다. 나는 증가 할 것인가? 단순히 자신을 호출하고 종료하면 함수가 중복되지 않습니다. 또는 나는 무엇인가 놓치고 있냐? – slava

+1

'setInterval()'은 3 초마다 계속 함수를 실행합니다. 그래서 함수를 다시 호출하면 또 다른'setInterval'을 시작할 것입니다,하지만 원본은 여전히 ​​실행 중입니다, 그래서 이제는 두 개가 있습니다. 그런 다음 다시 3 초마다 두 개가 함수를 다시 호출하여 두 개 더 만들고 두 개는 계속 실행하여 네 개, 네 개, 여덟 개, 네 개, 네 개 ... 등으로 만듭니다. –

답변

1

덕분에 정의되지 않은 아주 좋은 방법이 아닙니다. 대신 익명 함수를 사용하여

setInterval(function() { 
    launchTimedRotator(); 
}, 3000); 

비록 setInterval 그 자리에있을 것 같지 않습니다. 그것은 결국 많은 간판의 표본을 만들어 낼 것입니다. 대신 setTimeout을 사용하려고하셨습니까?

일반적으로 setInterval()setTimeout()과 같은 효과를 얻을 수 있습니다.

setInterval의 경우 그냥 setInterval(function() {}, 3000) 될 것이며, setTimeout의 경우는
function runTimeout() { 
    setTimeout(function() { 
     runTimeout(); 
    }, 3000); 
} 

는 개인적으로 좀 더 안정적이고 관리로 setTimeout()을 선호 할 것이다.

+0

또는'setInterval (launchTimedRotator, 3000)' –

+0

SetTimeout은 제가 원했던 것입니다, 당신 말이 맞습니다. 나는 익명의 함수 + setTimeout을 사용했고 그것은 매력처럼 작동했다. 고마워. 나는 여전히 JS 신택스를 처음 사용하고있다. – slava

관련 문제