当我拨打多个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。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:5)
您正在使用全局变量$elm
。在执行超时之前单击按钮时,变量已被覆盖,方法($elm.fadeOut
)不再绑定到该元素(因为变量引用了最新创建的元素)。
我的建议是在函数中使用var
使其成为本地:
var $elm = $('<div class="fadepopup"></div>');