$(document).ready(function () {
function EndSession() {
window.close();
};
setTimeout("EndSession()", 10000);
});
上面显示的是使用window.open()打开的子页面中的代码。
问题是在尝试调用EndSession十秒后,它会抛出错误 “Microsoft JScript运行时错误:'EndSession'未定义”
这里发生了什么?
答案 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)
答案 2 :(得分:3)
当超时事件触发时,您指定的代码将在全局命名空间中运行。
您的代码为"EndSession()"
,因此浏览器会尝试查找名为EndSession
的全局函数。没有这样的功能,因为您在传递给EndSession()
的匿名函数中定义了$(document).ready()
。
因此,将EndSession
定义为全局就足够了。
function EndSession() {
window.close();
};
$(document).ready(function () {
setTimeout("EndSession()", 10000);
});
此外,按照惯例,非构造函数的函数应以小写字母开头;)