2011-05-09 5 views
0

이것이 작동하지 않는 이유를 알 수없는 것 같습니다. 난 그냥 두 가지 간단한 기능 : img 노드에 이미지를로드하는 하나, 그리고 하나 더하기 변수. 두 번째 함수는 타이머 이벤트 후 카운트 한 다음에 image() 함수를 다시 발생시킵니다. 그것을 제외하고 작동하지 않습니다.간단한 자바 스크립트 XML 슬라이드 쇼

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    //XML Loaded, create the slideshow 
    alert(xmlhttp.responseText); 
    var slideShow = document.getElementById('slideShow'); 
    var items = []; 
    var nl = xmlhttp.responseXML.getElementsByTagName('image'); 
    var i = 0; 
    var t; 

    function image() { 
     var slideShowImg = document.getElementById('slideShowImg'); 
     var nli = nl.item(i); 
     var src = nli.getAttribute('src').toString(); 
     var width = parseInt(nli.getAttribute('width').toString()); 
     var height = parseInt(nli.getAttribute('height').toString()); 

     var imgNode = document.createElement('img'); 
     imgNode.setAttribute('src', src); 
     imgNode.setAttribute('height', height); 
     imgNode.setAttribute('width', width); 
     slideShowImg.appendChild(imgNode); 

     t = setTimeout("nextImage()", 5000); 
    } 

    function nextImage() { 
     i++; 
     image(); 
    } 

    image(); 
} 

답변

0

이 라인은 매우 의심스러운 :

t = setTimeout("nextImage()", 5000); 

이 대신보십시오 :

t = setTimeout(nextImage, 5000); 
+0

정상적인 상황에서는 둘 다 작동합니다. 그러나 nextImage를 문자열로 사용한다는 것은 함수의 최상위 범위를보고 있다는 의미이며 nextImage 루틴은 호출되기 전에 범위를 벗어납니다. 심볼 이름을 사용했다면 (그리고 아마도 그것이 호출 된 곳의 위의 함수를 정의했다면) 좋았을 것입니다. – ijw

+0

차이점은 문자열의 함수에 액세스 할 수 없기 때문에 처음에 범위 지정 문제가있을 수 있다는 것입니다. –

0

이동 함수 정의를 if 문에서.

+0

그렇지 않으면 nextImage()를 찾을 수 없습니다. –

+0

John Fisher의 답변에 대한 역의 해결책. 둘 다 작동합니다. – ijw