2009-12-22 3 views
3

60 초마다 새로 고쳐야하는 페이지가 있습니다. 이 페이지에서 나는 다양한 아이템을 팝업하기 위해 iBox을 사용하고 있습니다. 내 문제는 메타 새로 고침이 원하지 않는 팝업을 죽이는 것이다. 내 솔루션이 근본적으로 잘못 될 수 있으므로 자바 스크립트에 대한 경험이 거의 없음을 명심하십시오.자바 스크립트 새로 고침 시작 및 중지

제가 생각해 낸 해결책은 자바 스크립트를 사용하여 새로 고침을하는 것입니다. 페이지가로드되면 타이머가 시작되고, 타이머가 지워지면 타이머가 지워집니다. 타이머가 닫히면 다시 타이머가 시작됩니다.

간단한 기능을 사용하여 설정하고 있습니다.

 
function timedRefresh(timeoutPeriod){ 
    var resetId = 0; 
    resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 

그러면 함수는 <body onload="timedRefresh(60000)">입니다.

clearTimeout(resetID)으로 전화하려고하면 문제가 생깁니다. ibox 스크립트의 hide 함수에서 메서드를 호출하려고하지만 실제로 타이머를 지우지 않습니다. 범위 문제 일 수도 있고 Object.clearTimeout(Object.resetID) 일을해야 할 수도 있습니다.하지만 그건 그냥 추측입니다.

+0

이러한 솔루션의 대부분은 정확합니다. 문제는 분명히 범위 문제였습니다. 솔루션은 사용하려는 범위에 불과합니다. window.resetId를 사용하는 데 문제가있는 경우 내 대답을 변경하지만 사용했던 내용은 답변입니다. – UmYeah

+0

내 대답에 유용한 것들을 추가했습니다 –

답변

1

에 대한 링크가이 작업을 수행합니다.


의견을 보내 주시면 추가하겠습니다.

"창."은 브라우저 내에서 스크립팅 할 때 작동합니다. JS를 사용해야하는 곳에서는 JS가 작동하지 않을 것입니다.

그러나 웹 페이지에있는 한 은 전체 개체이며 "창"입니다. 접두사는 IMO입니다. 특정 변수가 전역 변수임을 분명히하는 좋은 방법입니다. 일관되게 사용하면 "창"이없는 모든 변수가 사용됩니다. 그 (것)들의 앞에 항상 국부적으로이다.

당신은 당신이 단순히 를 사용하는 경우도 작동합니다, 그러나, 알고 접두어없이 VAR로 선언되지 않은 변수가 자동으로 에 범위가 있기 때문에 VAR없이을 resetId한다.

This short-ish guide은 자바 스크립트, 실행 컨텍스트 및 클로저의 변수 가시성에 대해 알아야 할 대부분을 가르쳐 줄 것입니다. 그것은 치명적인 자바 스크립트 닌자가 될 수 있도록 당신을 보낼 것입니다.

+0

좋은 물건. 추가 정보를 가져 주셔서 감사합니다. – UmYeah

0

가장 쉬운 방법은 전역 범위에 resetId 변수를 추가하는 것입니다 : 또는

var resetId = 0; 
function timedRefresh(timeoutPeriod){ 
    resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 

, 당신은 같은 범위에 iBox의 숨기기 기능을 정의 할 수 있습니다,하지만 난 방법 너무 확실하지 않다 iBox가 작동합니다. 범위에

더 읽기 : 네 말이 맞아 http://javascript.about.com/library/bltut07.htm

0

는 문제가 변수 resetId의 범위이다. var 키워드를 사용하여 함수에서 선언 할 때이 함수는 로컬이므로이 함수 외부에 존재하지 않습니다.

는 단순히 글로벌 만들기 위해 기능의 resetId 외부를 선언, 당신은 괜찮을거야 :

var resetId = 0; 
function timedRefresh(timeoutPeriod){ 
    resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 
0

내가 새로 고칠 필요가있는 페이지의 내용을 건의 할 것, 아약스 통해 업데이트 .

function timedRefresh(timeoutPeriod){ 
    window.resetId = 0; // make it clear it's global by prefixing "window." 
    window.resetId=setTimeout("location.reload(true);",timeoutPeriod); 
} 

을 그리고 관련 ibox 기능을 사용 window.resetId에서 : 여기에 튜토리얼 http://www.w3schools.com/Ajax/Default.Asp

관련 문제