NAVER

질문 이 소스가 오류나는 이유좀 알려주세요
za**** 조회수 145 작성일2008.06.07

<script>
 function init_stage()
 {
  
  var i,j,k,temp,lay;
  
  for(k = 0; k < 7; k++ )
  {
   for(i=0; i < 2; i++ )
   {
    for(j=0;  j < 10; j++ )
    {
     lay = "tt";
     
     temp = ( k * 20 ) + ( i * 10 + j );
     lay += temp;
     
     document.write(lay,"</br>");
     
    }
    
   }
  }
  
  alert("in1");
  
  //var k = setInterval("intt()",1000);
       
 }
 
 function intt()
 {
  alert("in2");
  
  setTimeout("intt()",1000);
 }
</script>
</head>
<body onLoad="init_stage();intt();">

프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
달곰
영웅
자바스크립트, PHP, 일본어 독해, 읽기 분야에서 활동
본인 입력 포함 정보

오류 났을 때 소스보기를 해 보시면 알 수 있을 거예요.

 

setTimeout("intt()",1000);

이 코드는 1초 후에 intt() 함수를 호출하겠다는 코드인데..

 

이미 init_stage() 함수에서 document.write() 함수를 사용함으로써 본문이 싹 업데이트 되었습니다.

 

즉 intt() 함수는 최초 1회 실행된 이후에는 더 이상 함수 자체가 존재하지 않게 되어 오류가 발생하는 것이죠.

 

출력을 꼭 document.wirte() 함수로 하지 않아도 된다고 한다면.. 아래와 같이 해 보세요.

 

아래처럼 출력을 위한 영역(div)을 따로 잡고 거기에 innerHTML 로 결과를 출력한다면... intt() 함수가 사라질 염려가 없으니 오류도 발생하지 않겠죠.

 

 

 

<html>
<head>
<script>
 function init_stage()
 {
  var result = document.getElementById("result");
  var i,j,k,temp,lay;
 
  for(k = 0; k < 7; k++ )
  {
   for(i=0; i < 2; i++ )
   {
    for(j=0;  j < 10; j++ )
    {
     lay = "tt";
    
     temp = ( k * 20 ) + ( i * 10 + j );
     lay += temp;
    
     //document.write(lay,"</br>");
     result.innerHTML += lay + "<br>";
    
    }
   
   }
  }
 
  alert("in1");
 
  //var k = setInterval("intt()",1000);
      
 }
 
 function intt()
 {
  alert("in2");
 
  setTimeout("intt()",1000);
 }
</script>
</head>
<body onLoad="init_stage();intt();">
<div id="result"></div>
</body>
</html>

2008.06.08.

  • 채택

    질문자가 채택한 답변입니다.

  • 출처

    나..

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.