이것이 작동하지 않는 이유를 알 수없는 것 같습니다. 난 그냥 두 가지 간단한 기능 : 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();
}
정상적인 상황에서는 둘 다 작동합니다. 그러나 nextImage를 문자열로 사용한다는 것은 함수의 최상위 범위를보고 있다는 의미이며 nextImage 루틴은 호출되기 전에 범위를 벗어납니다. 심볼 이름을 사용했다면 (그리고 아마도 그것이 호출 된 곳의 위의 함수를 정의했다면) 좋았을 것입니다. – ijw
차이점은 문자열의 함수에 액세스 할 수 없기 때문에 처음에 범위 지정 문제가있을 수 있다는 것입니다. –