$(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);
演示