function myfunction()
{
window.setTimeout(alert('I waited for you.'),700000000);
}
我打电话给这样的功能,我立即得到警告说“我等你了”。
我最初把7000作为第二个参数,但是如果它是除了秒之外的东西,它还是继续推动它。我显然希望函数能够做其他事情,但我把它分解为这个简单的例子来向我自己证明问题所在。
我的错误是什么?
答案 0 :(得分:3)
你必须传递一个函数引用,而不是像这样执行alert()
的结果:
function myfunction() {
window.setTimeout(function() {alert('I waited for you.')},700000000);
}
当您将alert('I waited for you.')
传递给setTimeout()
时,您告诉javascript解释程序执行alert('I waited for you.')
,然后将返回结果传递给setTimeout()
。由于这会立即执行alert()
语句并且警报不会返回setTimeout()
使用的函数,这显然不是您想要的。
相反,您希望将函数引用传递给setTimeout()
。这可以使用匿名函数完成,如上面提供的示例,也可以使用单独的命名函数完成,如下所示:
function myAlert() {
alert('I waited for you.');
}
function myfunction() {
window.setTimeout(myAlert, 700000000);
}
注意:对于更高级的用法,只要该函数返回setTimeout()
稍后可以调用的函数引用,您实际上可以将立即执行的函数传递给setTimeout()
。但是,这显然不是您在alert()
答案 1 :(得分:2)
试试这个
function myfunction() {
window.setTimeout( function(){alert('I waited for you.');}, 700000000);
}
在您的代码中,立即调用函数警报。如果你想稍后执行,你应该传递对函数的引用而不是函数调用setTimeout
。
答案 2 :(得分:2)
你应该做
function makeAlert(){
alert('I waited for you.')
}
window.setTimeout(makeAlert,700000000);
否则立即执行alert()
答案 3 :(得分:2)
将其包装在匿名函数中:
function myfunction(){
window.setTimeout(function(){alert('I waited for you.')},700000000);
}
这是一个 example jsFiddle (更容易管理的3秒延迟)。
答案 4 :(得分:-1)
您可以简单地将alert('I waited for you.')
包裹在引号"
中:
function myfunction()
{
window.setTimeout("alert('I waited for you.')",7000);
}
数字是等待的毫秒数,因此7000是7秒。
答案 5 :(得分:-2)
我发现如果我在第一个参数周围加上引号,它就可以了。这就是我实际做的事情:
function divhide()
{
window.setTimeout("realhide()",7000);
}
function realhide(){
var mydiv = document.getElementById("mydiv");
mydiv.style.display="none";
mydiv.innerHTML="";
}