2012-05-21 5 views
0

를 참조 타이머는 기본적으로 내가 할 노력하고 무엇에 대한 코드입니다 :자바 스크립트 범위 : 여기에 임의의 새로운 객체

그래서 짧은
document.body.addEventListener("keypress", f1, false); 

function f1(e){ 
    var span = document.createElement("span"); 
    window.setInterval(function(){ 
     ... 
      window.clearInterval(this); 
      document.body.removeChild(span); 
} 

, 나는 새로운 DOM 요소를 만들려고 노력하고있어, 다음을 첨부 타이머를 사용하여 특정 개체를 참조 할 수 있습니다. 문제는 컨텍스트를 수행하는 방법을 모르므로 thiswindow을 참조하고, span (어쨌든 작동 할 것으로 예상하지는 않음)을 참조하려고하면 JavaScript에서 오류가 발생합니다. 해당 함수에서 만든 DOM 요소에 간격의 컨텍스트를 어떻게 설정할 수 있습니까?

+0

난 당신이'setTimeout'가 아니라'setInterval' ... –

+0

'span'에 액세스하는 오류가 발생하지 않아야합니다 생각합니다. 여전히 로컬 범위의 일부입니다. – Jivings

+0

재미있는 사실 :'clearInterval'도 타임 아웃을 지우는 데 사용할 수 있습니다 ... – MaxArt

답변

5

setInterval 타이머의 id 정수를 반환합니다. 그래서, 당신이 할 일은 그것을 저장하는 것입니다 :

var interval = setInterval(function(){ 
// ... 
    clearInterval(interval); 
+0

고맙지 만 개체에 액세스하려고하는데 간격을 지우는 데 문제가 없습니다. –

+2

예, 문제가 있습니다. 당신은 간격을 사용하고 있습니다. 그래서 그것이 제가 여기에서 일어난다 고 생각합니다 : 1) 간격 함수가 실행되었습니다; 2)'clearInterval'은 간격을 지우지 못합니다; 3) ''이 DOM에서 제거됩니다. 4) 잠시 후, 간격 함수 _가 다시 실행됩니다. 5)'clearInterval'이 다시 실패합니다; 6) ''을 제거하려고하면 예외가 발생합니다. – MaxArt

3

은 간격 변수를 유지 :

document.body.addEventListener("keypress", f1, false); 

function f1(e){ 
    var span = document.createElement("span"); 
    var myInterval = setInterval(function(){ 
     ... 
      clearInterval(myInterval); 
      document.body.removeChild(span); 
} 
+0

고맙지 만 객체에 액세스하려고한다. 간격을 지우는 데 문제가 없습니다. –