我正在尝试调用 showUpload();从两个 setTimeouts 内开始。两者都不起作用。它似乎超出了范围,我不确定为什么。我尝试了 this.showUpload()
但也不起作用。
$(document).ready(function(){
var progress_key = $('#progress_key').val();
// this sets up the progress bar
$('#uploadform').submit(function() {
setTimeout("showUpload()",1500);
$("#progressbar").progressbar({ value:0}).fadeIn();
});
// uses ajax to poll the uploadprogress.php page with the id
// deserializes the json string, and computes the percentage (integer)
// update the jQuery progress bar
// sets a timer for the next poll in 750ms
function showUpload() {
$.get("/myid/videos/uploadprogress/" + progress_key, function(data) {
if (!data)
return;
var response;
eval ("response = " + data);
if (!response)
return;
var percentage = Math.floor(100 * parseInt(response['bytes_uploaded']) / parseInt(response['bytes_total']));
$("#progressbar").progressbar({ value:percentage})
});
setTimeout("showUpload()", 750);
}
});
感谢您的宝贵时间。
最佳答案
正如@Daniel所说,这应该有效:
setTimeout(showUpload, 750);
请注意,应删除引号(这就是为什么在超时之前不会执行它)。现在,您正在传递一个字符串,当超时结束时,该字符串将被eval
ed。此 eval
将在不同的范围内发生,这就是您遇到问题的原因。
相反,将对 showUpload
函数的引用传递给 setTimeout
将允许您的函数稍后执行。请记住,当它运行时,它将处于不同的范围内,因此您可能会遇到其他范围问题,例如 progress_key
。您将需要围绕 showUpload 创建一个闭包来捕获该参数。
关于javascript setTimeout 函数超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925973/