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

            window.close();
        };

       setTimeout("EndSession()", 10000);

});

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

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

这里发生了什么?

4

3 回答 3

4

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

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

咱们试试吧:

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

    setTimeout(endSession, 10000);
});

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

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

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

于 2012-05-02T23:05:22.953 回答
3

应该是这样的

setTimeout(EndSession, 10000);

演示

于 2012-05-02T23:04:15.637 回答
3

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

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

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

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

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

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

于 2012-05-02T23:07:47.903 回答