Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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_Ajax_Liferay_Settimeout - Fatal编程技术网

Javascript 为什么settimeout不延迟函数执行?

Javascript 为什么settimeout不延迟函数执行?,javascript,jquery,ajax,liferay,settimeout,Javascript,Jquery,Ajax,Liferay,Settimeout,下面是deletfile函数 function tryToDownload(url) { oIFrm = document.getElementById('myIFrm'); oIFrm.src = url; // alert(url); // url=escape(url); setTimeout(deletefile(url), 25000); } 函数删除文件(url){ $.ajax({ 类型:'post', url

下面是deletfile函数

function tryToDownload(url)
{

       oIFrm = document.getElementById('myIFrm');
       oIFrm.src = url;
      // alert(url);
      // url=escape(url);

      setTimeout(deletefile(url), 25000); 
}
函数删除文件(url){
$.ajax({
类型:'post',
url:“”,
数据:{filename:url},
键入:“获取”,
超时:20000,
数据类型:“文本”,
成功:功能(数据){
警惕(“成功”);
}
});
}

上面是我的jQuery,我在25秒后最后调用了一个函数,但它并没有延迟deletefile(url)函数并在之后执行。那么应该是什么问题呢?

在这一行中,您正在调用函数并将其结果传递给

如果要延迟执行,请添加包装函数:

setTimeout(deletefile(url), 25000);
编辑

@Petah提出的备选方案:

setTimeout( function(){ deletefile(url); }, 25000);
延迟后传递给
setTimeout()
的所有参数将在执行时传递给函数。因此,在本例中,您将引用传递给函数、延迟,然后按该顺序将参数传递给函数


请注意,按照这种方式,在IE9之前的IE中传递参数是不起作用的。

这是因为您正在调用函数,并在setTimeout调用中使用返回值。将其包装在匿名函数中,以便由setTimeout调用:

setTimeout(deletefile, 25000, url);

@Bhavik Kama:如果您有
foo(deletefile(url))
,它会立即调用
deletefile
,并将其返回值传递到
foo
,对吗?因此,正如Sirko所说的,
setTimeout
,它与此完全相同。@Petah,向函数传递附加参数在Internet上不起作用Explorer@VitaliyPetrychuk,大坝。愚蠢的IE。可能是@Fraser的复制品:这不是真正的复制品。
setTimeout(deletefile, 25000, url);
function tryToDownload(url) {

    oIFrm = document.getElementById('myIFrm');
    oIFrm.src = url;
   // alert(url);
   // url=escape(url);

   setTimeout(function() { deletefile(url); }, 25000);

}