SetInterval表示函数不存在

时间:2011-12-17 06:03:22

标签: javascript jquery

我不知道我在这里失踪了什么。当setInterval开始运行时,它表示该函数不存在。我知道它在那里(我没有包含变量......因为这不是问题)。我知道为什么我收到错误说这些功能不存在的任何想法?

function midgroundFunc() {
    $('#midground').css({
        backgroundPosition: '0px 0px'
    });
    $('#midground').animate({
        backgroundPosition: "(" + midX + " " + midY + ")"
    }, midTime, midEase);
}

function foregroundFunc() {
    $('#foreground').css({
        backgroundPosition: '0px 0px'
    });
    $('#foreground').animate({
        backgroundPosition: "(" + foreX + " " + foreY + ")"
    }, foreTime, foreEase);
}

function backgroundFunc() {
    $('#back').css({
        backgroundPosition: '0px 0px'
    });
    $('#back').animate({
        backgroundPosition: "(" + backX + " " + backY + ")"
    }, backTime, backEase);
}
$(document).ready(function() {
    $('#midground').css({
        backgroundImage: 'url(' + midImage + ')'
    });
    $('#foreground').css({
        backgroundImage: 'url(' + foreImage + ')'
    });
    $('#back').css({
        backgroundImage: 'url(' + backImage + ')'
    });
    $.backstretch(backgroundStretch);



    midgroundFunc();
    foregroundFunc();
    backgroundFunc();

    setInterval("midgroundFunc()", midTime);
    setInterval("foregroundFunc()", foreTime);
    setInterval("backgroundFunc()", backTime);

});

这是我得到的错误:

错误:未定义backgroundFunc 行:96

错误:未定义midgroundFunc 行:94

错误:未定义foregroundFunc 行:95

2 个答案:

答案 0 :(得分:1)

直接调用函数而不是使用字符串。这样你可以避免范围问题:

 setInterval(midgroundFunc, midTime);
 setInterval(foregroundFunc, foreTime);
 setInterval(backgroundFunc, backTime);

答案 1 :(得分:1)

当您向setInterval提供字符串时,它会在时间到来时在全局上下文中评估此字符串。如果它应该调用的函数不是全局的,它将无法调用它们。

(function () {
    function callMe() { }

    setInterval("callMe()", 1000);
})();

// "callMe()" will be evaluated here,
// where function callMe is not in scope

引用传递给回调函数,而不是字符串:

setInterval(callMe, 1000);