我想我已经很接近要开始工作了,但是仍然无法弄清楚我的代码出了什么问题。我需要不停地运行一个函数,以通过一系列13或15个不同的图像随机交换图像src,具体取决于它们的大小。此功能有效,但只有一次,它没有按照我的计划无限运行,而没有出现“太多递归”浏览器错误。这是代码:

function SwitchImageLoop(image, imageSize){
    if(imageSize == '110x110'){var randomNumber = Math.floor(Math.random()*15) + 1};
    if(imageSize == '247x110'){var randomNumber = Math.floor(Math.random()*13) + 1};
    image = document.getElementById(image);
    var randomTimer = Math.floor(Math.random() * 3000) + 1000;
    FadeImages(image, imageSize, randomNumber);
    var endlessLoop = setTimeout(function(){SwitchImageLoop(image, imageSize)}, randomTimer);
}

function FadeImages(image, imageSize, randomNumber){
    $(image).fadeOut(300, function(){
        $(image).attr('src', '/halcyonic/images/collage_'  + imageSize + '_' + randomNumber + '.jpg').bind('onreadystatechange load', function(){
            if(image.complete) $(image).fadeIn(300);
        });
    });
}

最佳答案

问题是当您在setTimeout函数中调用SwitchImageLoop时。您的SwitchImageLoop接受第一个参数作为字符串(id),但是下次您在setTimeout中调用函数时,您将传递文档对象作为第一个参数。

function SwitchImageLoop(image, imageSize){
    if(imageSize == '110x110'){var randomNumber = Math.floor(Math.random()*15) + 1};
    if(imageSize == '247x110'){var randomNumber = Math.floor(Math.random()*13) + 1};


在下一次调用document.getElementById(documentObject)将给您错误

    image = document.getElementById(image);
    var randomTimer = Math.floor(Math.random() * 3000) + 1000;
    FadeImages(image, imageSize, randomNumber);
    var endlessLoop = setTimeout(function(){SwitchImageLoop(image, imageSize)}, randomTimer);
}


将您的函数重写为

    function SwitchImageLoop(image, imageSize){
        if(imageSize == '110x110'){var randomNumber = Math.floor(Math.random()*15) + 1};
        if(imageSize == '247x110'){var randomNumber = Math.floor(Math.random()*13) + 1};
         var randomTimer = Math.floor(Math.random() * 3000) + 1000;
        FadeImages(image, imageSize, randomNumber);
        var endlessLoop = setTimeout(function(){SwitchImageLoop(image, imageSize)}, randomTimer);
    }

    function FadeImages(image, imageSize, randomNumber){
       image=document.getElementById(image);
       $(image).fadeOut(300, function(){
            $(image).attr('src', '/halcyonic/images/collage_'  + imageSize + '_' + randomNumber + '.jpg').bind('onreadystatechange load', function(){
                if(image.complete) $(image).fadeIn(300);
            });
        });
    }

09-11 15:26