Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Javascript XML幻灯片_Javascript_Slideshow - Fatal编程技术网

简单Javascript XML幻灯片

简单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

我似乎不明白为什么这不起作用。我只有两个简单的函数:一个将图像加载到img节点,另一个加上一个I变量。第二个函数在计时器事件+计数后激发,然后再次激发image()函数。但它不起作用

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例程在调用之前就超出了作用域。如果您使用了符号名(并且可能在调用它的位置上定义了函数),那么您就很好了。区别在于,第一个符号名可能存在范围问题,因为它可能无法访问字符串中的函数。