javascript 中的 setTimeout 问题


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

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

问题是在十秒后,当它尝试调用 EndSession 时,它会抛出错误"Microsoft JScript 运行时错误:"结束会话"未定义"

这是怎么回事?

也许旧方式"字符串"的问题在于它在全局范围内查找方法,而该方法是在用于 jQuery ready 的函数中定义的。

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

让我们试试:

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

虽然我没有尝试过,但也许这甚至会起作用:

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

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

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

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

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

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

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

应该是这样的,

setTimeout(EndSession, 10000);

演示

最新更新