jQuery: append() de l'objet, supprimer (), avec un délai de()

quel est le problème avec ça?

$('body').append("<div class='message success'>Upload successful!</div>");
$('.message').delay(2000).remove();

je veux ajouter un message de succès à mon document html, mais seulement pour 2sec. Après cela le div devrait être supprimé à nouveau.

ce que je fais mal?

cordialement

34
demandé sur matt 2010-09-07 07:47:05

4 réponses

en utilisant setTimeout() directement (.delay() utilise en interne) est plus simple ici, car .remove() n'est pas une file d'attente de la fonction, l'ensemble, il devrait ressembler à ceci:

$('body').append("<div class='message success'>Upload successful!</div>");
setTimeout(function() {
  $('.message').remove();
}, 2000);

Vous pouvez l'essayer ici.

.delay() pour l'animation (ou peu importe le nom) de la file d'attente, pour l'utiliser, vous avez à faire quelque chose comme:

$("<div class='message success'>Upload successful!</div>").appendTo('body')
  .delay(2000).queue(function() { $(this).remove(); });

Qui fonctionne, ici...mais il est juste trop de travail et terriblement inefficace, pour enchaîner IMO. Normalement, vous devez aussi appeler dequeue ou la fonction suivante, mais puisque vous retirez l'élément de toute façon...

88
répondu Nick Craver 2010-09-07 04:03:40

je pense que la bonne façon de le faire est d'utiliser la méthode de la file d'attente jQuery:

    $("<div class='message success'>Upload successful!</div>")
        .appendTo('body')
        .delay(2000)
        .queue(function() {
            $(this).remove();
        });
4
répondu Viktor Kruglikov 2017-02-04 16:36:22

peut-être que j'utilise un jQuery périmé, mais aucune des méthodes suggérées dans les autres réponses ne semble fonctionner pour moi. Selon http://api.jquery.com/delay/ , le retard pour les effets d'animation.

en utilisant setTimeout() toutefois, fonctionne très bien pour moi:

$('body').append("<div class='message success'>Upload successful!</div>"); 
setTimeout(function(){
    $(".message").remove();
}, 2000);
2
répondu WSkid 2011-08-31 18:28:25

Et juste pour le plaisir, vous pouvez effectuer les opérations suivantes, à l'aide de retard:

$('body').append("<div class='message success'>Upload successful!</div>");
$('.message').show('fast').delay(2000).hide('fast')
$('.message').remove();
0
répondu Strelok 2010-09-07 04:00:55