Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中setTimeout的问题_Javascript_Jquery - Fatal编程技术网

javascript中setTimeout的问题

javascript中setTimeout的问题,javascript,jquery,Javascript,Jquery,上面显示的是使用window.open()打开的子页面中的代码 问题是在十秒钟后,当它试图调用EndSession时,会抛出一个错误 “Microsoft JScript运行时错误:“EndSession”未定义” 这是怎么回事?应该是这样的 $(document).ready(function () { function EndSession() { window.close(); }; setTimeout("EndSe

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

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


这是怎么回事?

应该是这样的

$(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的答案。这是否回答了您的问题?在他们让您将响应标记为答案之前有一段延迟,因此我必须稍后返回:(这是否回答了您的问题?在他们让您将响应标记为答案之前有一段延迟,因此我必须稍后返回:(