【问题标题】:clearTimeout() for setTimeout() in for loop循环中的 setTimeout() 的 clearTimeout()
【发布时间】:2014-08-14 15:28:17
【问题描述】:

clearTimeout() 内的for 循环不起作用

for(i=0;i<10;i++){
    myVar = setTimeout(function(){
        alert("Hello")
    }, 3000);
}

小提琴:not working

小提琴:working

请帮我阻止setTimeout() 在第一个小提琴中。

【问题讨论】:

    标签: javascript jquery settimeout cleartimeout


    【解决方案1】:

    您必须保留对循环中创建的每个超时的引用,然后迭代并清除每个超时,否则您只是用新的超时覆盖 myVar 而不会清除前一个超时,并丢失随时参考等。

    $(document).ready(function(){
        var myVar = []
    
        $("#myfunction").click(myFunction);
        $("#mystopfunction").click(myStopFunction);
    
        function myFunction() {
            for(i=0;i<10;i++){
                myVar.push(
                    setTimeout(function(){
                        alert("Hello")
                    }, 3000)
                );
            }
        }
    
        function myStopFunction() {
            myVar.forEach(function(timer) {
                clearTimeout(timer);
            });
        }
    });
    

    FIDDLE

    【讨论】:

    • 正是我要建议的。原帖中的代码覆盖了myVar的值,所以只有最后一次超时受clearTimeout的影响。
    • 伙计,你救了我的命:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多