javascript中setTimeout的问题
上面显示的是使用window.open()打开的子页面中的代码 问题是在十秒钟后,当它试图调用EndSession时,会抛出一个错误 “Microsoft JScript运行时错误:“EndSession”未定义”javascript中setTimeout的问题,javascript,jquery,Javascript,Jquery,上面显示的是使用window.open()打开的子页面中的代码 问题是在十秒钟后,当它试图调用EndSession时,会抛出一个错误 “Microsoft JScript运行时错误:“EndSession”未定义” 这是怎么回事?应该是这样的 $(document).ready(function () { function EndSession() { window.close(); }; setTimeout("EndSe
这是怎么回事?应该是这样的
$(document).ready(function () {
function EndSession() {
window.close();
};
setTimeout("EndSession()", 10000);
});
应该是这样的
$(document).ready(function () {
function EndSession() {
window.close();
};
setTimeout("EndSession()", 10000);
});
旧方法“string”的问题可能在于它在全局范围内查找方法,而该方法是在jQuery
ready
所使用的函数中定义的
如果我们有一个适当的引用,我们可以显式地传递我们真正想要的函数
让我们试试:
setTimeout(EndSession, 10000);
虽然我还没有尝试过,但也许这也能奏效:
$(document).ready(function () {
var endSession = function() {
window.close();
};
setTimeout(endSession, 10000);
});
我不确定您是否也需要准备好jQuery,除非您有意在文档完全加载后开始计算时间(我希望弹出窗口很快就会关闭)。也许旧方法“string”的问题在于它在全局范围内查找方法,而该方法是在用于jQuery
ready
的函数中定义的
如果我们有一个适当的引用,我们可以显式地传递我们真正想要的函数
让我们试试:
setTimeout(EndSession, 10000);
虽然我还没有尝试过,但也许这也能奏效:
$(document).ready(function () {
var endSession = function() {
window.close();
};
setTimeout(endSession, 10000);
});
我不确定您是否也需要准备好jQuery,除非您有意在文档完全加载后开始计算时间(我希望弹出窗口很快就会关闭)。当超时事件触发时,您指定的代码将在全局命名空间中运行 您的代码是
“EndSession()”
,因此浏览器尝试查找名为EndSession
的全局函数。没有这样的函数,因为您在传递给$(document).ready()的匿名函数中定义了EndSession()
因此,将EndSession
定义为全局就足够了
$(document).ready(function () {
setTimeout(window.close, 10000);
});
此外,根据约定,非构造函数的函数应以小写字母开头;) 当超时事件触发时,您指定的代码将在全局命名空间中运行
您的代码是“EndSession()”
,因此浏览器尝试查找名为EndSession
的全局函数。没有这样的函数,因为您在传递给$(document).ready()的匿名函数中定义了EndSession()
因此,将EndSession
定义为全局就足够了
$(document).ready(function () {
setTimeout(window.close, 10000);
});
此外,根据约定,非构造函数的函数应以小写字母开头;) 解释一下为什么这样做有效,而另一个不起作用会改善这个答案。@developer747您试过他的演示吗?它应该是这样工作的。这是因为在演示中,作为参数传递的EndSession
是对闭包中定义的函数EndSession
的引用。在名称周围使用”
,只有在触发事件后才会对其进行解释,而该事件将位于全局命名空间中。括号不是这里的重点:)解释一下为什么这样做有效,而另一个不起作用会改善这个答案。@developer747你试过他的演示吗?它应该是这样工作的。这是因为在演示中,作为参数传递的EndSession
是对闭包中定义的函数EndSession
的引用。在名称周围使用”
,只有在触发事件后才会对其进行解释,而该事件将位于全局命名空间中。括号不是这里的要点:)附录:如果不想污染全局名称空间,可以在闭包中引用函数。请参阅@mohamedmelicy的答案。附录:如果您不想污染全局命名空间,可以在闭包中引用该函数。请参阅@MohamedMeligy的答案。这是否回答了您的问题?在他们让您将响应标记为答案之前有一段延迟,因此我必须稍后返回:(这是否回答了您的问题?在他们让您将响应标记为答案之前有一段延迟,因此我必须稍后返回:(