Javascript数组问题:无法读取未定义的属性'src'

时间:2011-08-31 16:22:16

标签: javascript undefined

这个脚本多年来一直在waterbirds.org上运行。现在由于某种原因它被打破了。它抛出一个“无法读取属性'src'的未定义”错误,我将它跟踪到preLoad [j] .src(runSlideShow函数的第一行)作为问题,因为我可以在那里放置一个图像链接地址,它的工作原理。知道是什么导致了这个问题吗?

// Waterbird Society Theme for Wordpress
// Rotating image banner applet
//
// Usage:
//<body onLoad='rotate_banner(slideShowSpeed, "Image1.jpg", "Image2.jpg"...)'>



var slideShowSpeed;
var j = 0;
var p;
var preLoad = new Array();

function rotate_banner() {
    var args = rotate_banner.arguments;
    slideShowSpeed = Number(args[0]);
    p = args.length;
    for (i = 0; i < p-1; i++) {
        preLoad[i] = new Image();
        preLoad[i].src = args[i+1];
    }
    runSlideShow();
}

function runSlideShow() {
    document.images['SlideShow'].src = preLoad[j].src;
    j++;

    if (j > (preLoad.length - 1)) j = 0;

    t = setTimeout('runSlideShow()', slideShowSpeed*1000);
}

1 个答案:

答案 0 :(得分:1)

除了代码全局运行以外,所有代码都没有问题,因此所有var声明都会创建全局变量。

关于waterbirds.org的确切问题是j变量是在preLoad[j] j等于96之前和preload[96]之前的某个地方定义的。确实是未定义的。

将你的横幅包裹在一个匿名的自动执行功能中,例如,让vars成为本地的,你已经完成了:

(function(){

var slideShowSpeed;
var j = 0;
var p;
var preLoad = new Array();

// to keep rotate_banner global, save it as a property of window object
window.rotate_banner = function() {
    var args = rotate_banner.arguments;
    slideShowSpeed = Number(args[0]);
    p = args.length;
    for (i = 0; i < p-1; i++) {
        preLoad[i] = new Image();
        preLoad[i].src = args[i+1];
    }
    runSlideShow();
}

function runSlideShow() {
    document.images['SlideShow'].src = preLoad[j].src;
    j++;

    if (j > (preLoad.length - 1)) j = 0;

    t = setTimeout('runSlideShow()', slideShowSpeed*1000);
}

})()

请记住:global variables are evil! =)