2010-09-09 5 views
12

J'ai un problème étrange avec la fonction de délai ici en utilisant la fonction html avec elle.JQuery: l'utilisation du délai avec html ou le réglage du texte ne fonctionne pas

Je mis un texte HTML en utilisant $('#element').html('Hello World');

Après avoir défini le texte que je veux obtenir ce texte disparaître en 3 secondes.

Alors, la prochaine ligne i a écrit:

$('#element').delay(3000).html('&nbsp'); 

Celui-ci ne fonctionne pas, il définit le code html à &nbsp sans attendre les 3 secondes, il ressemble à jquery saute la fonction de retard. Utiliser ceci avec fadeOut par exemple fonctionne bien. Je suppose que cela a quelque chose à voir avec cette file d'attente en retard.

Mais pourquoi cela ne fonctionne pas. C'est assez simple, attendez 3 secondes puis exécutez la fonction html.

Quelqu'un pourrait-il nous conseiller? Merci.

PS: Pour info, j'utiliser jQuery 1.4.2

Répondre

19

retard() par défaut de la file d'attente d'animation, pour des effets tels que fadeOut(), etc. Vous devez utiliser setTimeout() à la place:

window.setTimeout(function() { 
    $("#element").html(' '); 
}, 3000); 

De http://api.jquery.com/delay/:

jQuery.delay() est le meilleur pour retarder entre les effets jQuery en file d'attente et autres, et n'est pas un remplacement pour natif de JavaScript setTimeout fonction, ce qui peut être plus approprié pour certains cas d'utilisation.

+4

Pour être plus précis, '.delay()' applique à * une file d'attente *, juste * par défaut * à la file d'attente d'animation :) –

+0

@ Nick: merci pour la correction, mise à jour :-) Merci –

+0

cette on travaille maintenant. Encore une question: cela fonctionne-t-il sur tous les navigateurs? Je ne sais pas si window.setTimeout fonctionnera dans toutes les versions d'IE et de FF. – NovumCoder

14

.html() n'est pas une fonction mis en attente. Si vous voulez que cela se produise dans l'ordre dans la file d'attente d'animation, vous devrez .queue() vous-même, comme ceci:

$('#element').delay(3000).queue(function(n) { 
    $(this).html('&nbsp'); n(); 
}); 

Si vous n'êtes pas enchaînant des animations ou quelque chose comme cela, utilisez setTimeout() ou setInterval() (selon est approprié à la situation) directement, .delay() est just a wrapper pour setTimeout() et il n'y a aucune raison d'utiliser un code supplémentaire/complexité quand il n'y a pas besoin.

Questions connexes