简单Javascript XML幻灯片
我似乎不明白为什么这不起作用。我只有两个简单的函数:一个将图像加载到img节点,另一个加上一个I变量。第二个函数在计时器事件+计数后激发,然后再次激发image()函数。但它不起作用简单Javascript XML幻灯片,javascript,slideshow,Javascript,Slideshow,我似乎不明白为什么这不起作用。我只有两个简单的函数:一个将图像加载到img节点,另一个加上一个I变量。第二个函数在计时器事件+计数后激发,然后再次激发image()函数。但它不起作用 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { //XML Loaded, create the slideshow alert(xmlhttp.responseText); var slideShow = do
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();
}
这条线看起来很可疑:
t = setTimeout("nextImage()", 5000);
请尝试以下方法:
t = setTimeout(nextImage, 5000);
将函数定义移出if语句。否则将找不到nextImage()。这正是John Fisher答案的相反解决方案。两者都会起作用。在正常情况下,两者都会起作用。然而,我感觉nextImage作为一个字符串意味着您正在查找函数的顶级作用域,而nextImage例程在调用之前就超出了作用域。如果您使用了符号名(并且可能在调用它的位置上定义了函数),那么您就很好了。区别在于,第一个符号名可能存在范围问题,因为它可能无法访问字符串中的函数。