当我使用简单的Javascript函数时,我在IE 8中遇到“第0行堆栈溢出”错误。我该如何解决这个错误?

时间:2014-08-06 18:49:31

标签: javascript html internet-explorer internet-explorer-8

这是功能:

function LoadBanner(img) {
        var d = new Date();
        var Today = d.getDate();
        var Month = d.getMonth();
        Month++; //Months are 0 based
        var src;
        if (Month === 8 && (Today >= 1 && Today <= 17)) {
            src = "banner1.jpg";
        } else if (Month === 8 && (Today >= 18 && Today <= 31)) {
            src = "banner3.jpg";
        } else if (Month === 9 && (Today >= 1 && Today <= 7)) {
            src = "banner2.jpg";
        } else if (Month === 9 && (Today >= 8 && Today <= 14)) {
            src = "banner5.jpg";
        } else if (Month == 9 && (Today >= 15 && Today <= 21)) {
            src = "banner4.jpg";
        } else if (Month == 9 && (Today >= 22 && Today <= 28)) {
            src = "banner6.jpg";
        } else if (Month == 9 && (Today >= 29 && Today <= 30)) {
            src = "banner7.jpg";
        } else {
            document.getElementById("bannerdiv").style.display = "none";
        }

        img.src = src;
    }

这是HTML:

<div class="banner" id="bannerdiv">
    <!--<img id="Logo" src="banner2.jpg" alt="KnowledgeBase" width="100%" height="100%" onload="LoadBanner(this)" />-->
    <img id="Logo" src="banner1.jpg" alt="KnowledgeBase" width="100%" height="100%"" />
</div>

注意:当我在onLoad中调用该函数时,IE 8中会抛出错误,但在当前版本的IE和Chrome中工作正常。我读过一些关于递归调用函数超过12次的内容可能会导致错误...或者为IE请求太多内存但是我不认为我在这里做任何事情。

1 个答案:

答案 0 :(得分:2)

您正在更改图像的来源,强制它重新加载并再次触发onload。

可能最快的解决方法是:

if (img.src != src) {
    img.src = src;
}
如果src没有改变,

避免重新加载。我猜测后来的浏览器已经内置了这个检查,但即使是那些也会运行你的onload处理程序两次。