2010-01-24 6 views
4

Hé là, j'essaye d'avoir un div "cacher", puis "enlever" une fois l'animation de peau terminée. Il semble que je puisse obtenir l'un ou l'autre, mais pas les deux. J'ai essayé d'utiliser setTimeout, mais cela ne fait que masquer la div mais pas la supprimer.jQuery, essayant d'enlever un div caché après x secondes?

Voici le code:

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

Si je fais le supprimer sans setTimeout, il enlève la div, mais ne pas afficher l'animation cacher.

Toute aide appréciée!

Répondre

2

Avez-vous essayé quelque chose comme:

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

qui exécutera le code settimeout lorsque le code cache est terminé.

plus d'informations ici sur le rappel: http://api.jquery.com/hide/

--fixed pour le champ d'this

0

.hide prend un rappel complet que vous pouvez utiliser. Aussi .closest est plus efficace que les parents d'abord que vous utilisez actuellement.

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

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

Pour utiliser setTimeout vous feriez

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

$div.hide("fast"); 

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

Je crois qu'il est une question de portée. Lorsque votre fonction setTimeout() s'exécute, le contexte de this est différent à l'intérieur de la fonction que ce qu'il était lorsque vous l'avez déclaré.

Essayez ceci:

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

Pourquoi la jambe .parents fonctionne-t-elle deux fois? Rappelez-vous ceci traverse tous les parents – redsquare

+0

@redsquare - bon appel. Je faisais seulement attention à la portée, pas aux sélecteurs réels quand je l'ai écrit. Je l'ai mis à jour pour être un peu plus efficace. – zombat

+1

puis utilisez le plus proche;) – redsquare

2

Salut à tous, merci pour les réponses impressionnante (et rapide!)! Appréciez-le. J'ai fini par utiliser une combinaison de plusieurs d'entre eux qui semble bien fonctionner.

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

@John: Merci! Je suis assez nouveau à ceci, et continue à oublier le rappel (frappe la main au front!)

@redsqure: Merci pour l'astuce d'efficacité! J'apprends encore ...

@zombat: Oui, bonne capture - Je l'ai contourner dans ce qui précède en supprimant l'appel aux partants dans le rappel, comme je supprimais le parent des parents à ce moment-là. ;)

@ Tim: Le .delay (1000) semblait prometteur, je ne pouvais pas le faire fonctionner() (oui, j'utilise 1.4);)

Merci ppl! :)

Questions connexes