多个setTimeouts互相取消?

时间:2014-05-27 18:03:35

标签: javascript jquery

当我拨打多个setTimeout时,我遇到了一个问题,当他们一个接一个地快速解雇时,他们似乎互相取消了。

鉴于这个小提琴:http://jsfiddle.net/72M6L/

显示了这个非常简单的对象:

fadepopup = function (msg) 
{
    $elm = $('<div class="fadepopup"></div>');
    $elm.html('msg');
    $('body').append($elm);

    setTimeout(function () 
    {
        $elm.fadeOut(500, function () 
        {
            $(this).remove()
        });
    }, 1500);
}

如果你按下按钮一次(在小提琴中),一切都很棒 如果您快速按下按钮多次,则不会删除div。

为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:5)

您正在使用全局变量$elm。在执行超时之前单击按钮时,变量已被覆盖,方法($elm.fadeOut)不再绑定到该元素(因为变量引用了最新创建的元素)。

我的建议是在函数中使用var使其成为本地:

var $elm = $('<div class="fadepopup"></div>');

请参阅update fiddle