为什么settimeout没有延迟函数执行?
function tryToDownload(url) { oIFrm = document.getElementById('myIFrm'); oIFrm.src = url; // alert(url); // url=escape(url); setTimeout(deletefile(url), 25000); }
以下是deletfile函数
function deletefile(url){ $.ajax({ type:'post', url: "", data:{filename:url}, type : "GET", timeout : 20000, dataType : "text", success : function(data) { alert("success"); } }); }
上面是我的jQuery和我在25秒后调用一个函数,但有些如何不延迟deletefile(url)函数并执行刚刚执行。那么应该是什么问题?
在这一行中,您调用函数并将其结果传递给setTimeout()
。
setTimeout(deletefile(url), 25000);
如果要延迟执行,请添加包装函数:
setTimeout( function(){ deletefile(url); }, 25000);
编辑
@Petah提出的另一种选择:
setTimeout(deletefile, 25000, url);
延迟后传递给setTimeout()
所有参数将在执行时传递给函数。 所以在这种情况下,你将参数传递给函数,延迟,然后按顺序将参数传递给函数!
请注意,根据MDN,这种传递参数的方式在IE9之前不会在IE中工作。
那是因为你正在调用该函数,并使用setTimeout调用中的返回值。 将它包装在匿名函数中,以便setTimeout调用它:
function tryToDownload(url) { oIFrm = document.getElementById('myIFrm'); oIFrm.src = url; // alert(url); // url=escape(url); setTimeout(function() { deletefile(url); }, 25000); }