javascript setTimeout 函数超出范围

标签 javascript jquery

我正在尝试调用 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);

请注意,应删除引号(这就是为什么在超时之前不会执行它)。现在,您正在传递一个字符串,当超时结束时,该字符串将被evaled。此 eval 将在不同的范围内发生,这就是您遇到问题的原因。

相反,将对 showUpload 函数的引用传递给 setTimeout 将允许您的函数稍后执行。请记住,当它运行时,它将处于不同的范围内,因此您可能会遇到其他范围问题,例如 progress_key。您将需要围绕 showUpload 创建一个闭包来捕获该参数。

关于javascript setTimeout 函数超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925973/

相关文章:

javascript - Angular JS Datatables 行单击事件添加动态 AngularUI 选项卡

php - 防止用户在页面刷新时重新单击 "Like"按钮

javascript - 在 DOM/Isotope 加载时显示一些东西

javascript - jQuery 克隆几个 "li"并附加到 ul 的特定位置(不是它的末尾)

javascript - ejs中不能for循环

javascript - 如何使用 Javascript 访问 Google Maps API 的版本号?

javascript - react 不渲染组件

javascript - 当我单击表格中的特定 td 时,我想将复选框设置为 "checked"

javascript - jQuery 动画故障?

javascript - 单击 HTML 后如何保持选择?