我不止一次使用过setTimeout,除了这次我没有发现任何问题。 在这种情况下,setTimeout再次调用我的方法,但不是在3000(或其他)的延迟后,但只是立即,我不能理解为什么..(在函数refreshPhalanx中) 这是代码: (我曾经在3000到3500毫秒之间创建一个随机延迟并将其存储在var" msec"中,但是在我使用3000之后,测试它以防错误是在构造延迟时,但是仍然没有结果..)
var n=1;
function refreshPhalanx(id){
console.debug(id);
//$('.refreshPhalanxLink').click();
if($('#'+id).length){
console.debug('still going'+n++);
var msec=Math.floor((Math.random()/2+3)*1000)
console.debug(msec);
setTimeout(refreshPhalanx(id), 3000); //I used msec before, but I put 3000 to test if it was just a mistake into the calculation of the milliseconds, or a problem with setTimeout method.
}
else
alert('Alle ore '+new Date($.now())+' la missione risulta ritirata.');
}
function delay(){
if($('.phalanx').length){
console.debug('appending');
$('.eventFleet').each(function(){
$(this).append('<button currentevent="'+$(this).attr('id')+'" class="buttons">calcola rientro</button>');
})
console.debug('appending');
$('.buttons').click(function(){
console.debug('click --->'+ $(this).attr('currentEvent'));
refreshPhalanx($(this).attr('currentevent'));
})
console.debug('appending');
}
else{
setTimeout(delay, 2000);
console.debug('delaying');
}
}
delay();
&#13;
答案 0 :(得分:2)
表达式
setTimeout(refreshPhalanx(id), 3000);
表示:调用函数refreshPhalanx(id)
并将返回值设置为setTimeout
的第一个参数。
setTimeout的概要是function setTimeout(callback, milliseconds)
,其中回调是可调用的函数或具有函数名称的字符串。
将您的代码更改为
setTimeout(function () {
refreshPhalanx(id);
}, 3000);
答案 1 :(得分:1)
您需要将function
作为第一个参数传递给setTimeout
。但是对于refreshPhalanx(id)
,您没有传递函数,而是传递该函数的返回值,在您的情况下为undefined
。
要传递带参数的函数,只需包装函数:
setTimeout(function(){
refreshPhalanx(id)
},3000);
最有可能的情况是
setTimeout(delay, 2000);
正常工作,因为在这里你只是传递了函数名而没有用()
执行它。
答案 2 :(得分:0)
尝试将您的通话嵌套在setTimeout()
内的匿名功能中:
setTimeout(function(){
refreshPhalanx(id);
}, 3000);
和
setTimeout(function(){
delay();
}, 2000);