嘿那里,我试图让div“隐藏”,然后在隐藏动画完成后“删除”。看来我可以上班,但不是两者兼而有之。我尝试过使用setTimeout,但这只会导致div被隐藏,但实际上并未被删除。
以下是代码:
$(this).parents("div:eq(0)").hide("fast");
setTimeout(function () { $(this).parents("div:eq(0)").remove();}, 1000);
如果我在不使用setTimeout的情况下执行删除操作,则会删除div,但不会显示隐藏动画。
任何帮助表示赞赏!
答案 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);