4

嘿,我想要一个 div “隐藏”,然后在隐藏动画完成后“删除”。看来我可以让任何一个工作,但不能同时工作。我曾尝试使用 setTimeout,但这只会导致 div 被隐藏,但实际上并没有被删除。

这是代码:

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

如果我在没有 setTimeout 的情况下进行删除,它会删除 div,但不显示隐藏动画。

任何帮助表示赞赏!

4

4 回答 4

6

我相信这是一个范围界定问题。当你的setTimeout()函数运行时,this函数内部的上下文与你声明它时的上下文不同。

尝试这个:

var self = $(this).parents("div:eq(0)");
self.hide("fast");
setTimeout(function () { self.remove();}, 1000);
于 2010-01-24T19:29:35.113 回答
2

大家好,感谢您的精彩(而且快速!)回复!欣赏它。

我最终使用了其中几个似乎效果很好的组合。

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

@约翰:谢谢!我对此很陌生,并且一直忘记回调(用手摸额头!)

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

@zombat:是的,很好 - 我在上面解决了这个问题,在回调中删除了对父母的调用,因为当时我正在删除父母的父母。;)

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

谢谢大家!:)

于 2010-01-24T19:41:45.810 回答
2

你有没有尝试过类似的东西:

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

隐藏代码完成后将运行 settimeout 代码。

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

--固定的范围this

于 2010-01-24T19:23:11.330 回答
0

.hide 接受您可以使用的完整回调。.closest 也比您当前使用的 parent first 更有效。

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);
于 2010-01-24T19:26:52.063 回答