jQuery,尝试在x秒后删除隐藏的div?

时间:2010-01-24 19:20:36

标签: jquery hide settimeout

嘿那里,我试图让div“隐藏”,然后在隐藏动画完成后“删除”。看来我可以上班,但不是两者兼而有之。我尝试过使用setTimeout,但这只会导致div被隐藏,但实际上并未被删除。

以下是代码:

$(this).parents("div:eq(0)").hide("fast");
setTimeout(function () { $(this).parents("div:eq(0)").remove();}, 1000);

如果我在不使用setTimeout的情况下执行删除操作,则会删除div,但不会显示隐藏动画。

任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:6)

我认为这是一个范围问题。当您的setTimeout()函数运行时,this的上下文在函数内部与您声明它时的内容不同。

试试这个:

var self = $(this).parents("div:eq(0)");
self.hide("fast");
setTimeout(function () { self.remove();}, 1000);

答案 1 :(得分:2)

你尝试过类似的事情吗?

$(this).parents("div:eq(0)").hide("fast", function(){
    var div = this;
    setTimeout(function () { $(div).remove(); }, 1000);
});

将在隐藏代码完成时运行settimeout代码。

此处有关回调的更多信息:http://api.jquery.com/hide/

- 已针对this

的范围进行了修正

答案 2 :(得分:2)

嘿所有,感谢真棒(快速!)的回复!欣赏它。

我最终使用了其中几种似乎运作良好的组合。

$(this).closest("div").hide("fast", function() {
    $(this).remove();
});
@John:谢谢!我对此很陌生,并且一直忘记回调(对额头嗤之以鼻!)

@redsqure:感谢效率提示!还在学习......

@zombat:是的,很好的捕获 - 我在上面解决了这个问题,在回调中删除了对部分人的呼叫,因为那时我正在删除父母的父母。 ;)

@Tim:.delay(1000)看起来很有前途,我无法让它工作(?)(是的,我正在使用1.4);)

谢谢你! :)

答案 3 :(得分:0)

.hide会使用您可以使用的完整回调。另外.closest比你目前使用的父母更有效率。

var $div = $(this).closest('div');

$div.hide("fast", function(){
    $div.remove();
});

要使用setTimeout,您可以

var $div = $(this).closest('div');

$div.hide("fast");

window.setTimeout(function () { 
      $div.remove();
}, 1000);