在javascript中使用setTimeout的麻烦

时间:2012-05-02 23:02:49

标签: javascript jquery

$(document).ready(function () {       
function EndSession() {

            window.close();
        };

       setTimeout("EndSession()", 10000);

});

上面显示的是使用window.open()打开的子页面中的代码。

问题是在尝试调用EndSession十秒后,它会抛出错误 “Microsoft JScript运行时错误:'EndSession'未定义”

这里发生了什么?

3 个答案:

答案 0 :(得分:4)

可能旧方法“字符串”的问题在于它在全局范围内寻找方法,而该方法是在用于jQuery ready的函数内定义的。

如果我们有适当的引用,我们可以显式传递我们真正想要的函数。

让我们试试:

$(document).ready(function () {       
    var endSession = function() {
        window.close();
    };

    setTimeout(endSession, 10000);
});

虽然我没有尝试过,但即使这样也行不通:

$(document).ready(function () {       
    setTimeout(window.close, 10000);
});

我不确定你是否还需要jQuery准备就绪,除非你有意在文档完全加载后开始计算时间(对于即将关闭的弹出窗口,我希望它非常快) )。

答案 1 :(得分:3)

应该是这样的,

setTimeout(EndSession, 10000);

DEMO

答案 2 :(得分:3)

当超时事件触发时,您指定的代码将在全局命名空间中运行。

您的代码为"EndSession()",因此浏览器会尝试查找名为EndSession的全局函数。没有这样的功能,因为您在传递给EndSession()的匿名函数中定义了$(document).ready()

因此,将EndSession定义为全局就足够了。

function EndSession() {
    window.close();
};

$(document).ready(function () {
    setTimeout("EndSession()", 10000);
});

此外,按照惯例,非构造函数的函数应以小写字母开头;)