Подтвердить что ты не робот

JQuery: append() object, remove() с задержкой()

что с этим связано?

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

Я хочу добавить сообщение об успешном завершении в свой html-документ, но только для 2сек. После этого div должен быть удален снова.

Что я здесь делаю неправильно?

рассматривает

4b9b3361

Ответ 1

Используя setTimeout() напрямую (.delay() использует внутренне) проще, поскольку .remove() не является функцией в очереди, в целом она должна выглядеть следующим образом:

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

Здесь вы можете попробовать здесь.

.delay() для очереди анимации (или любой другой), чтобы использовать ее, вам нужно сделать что-то вроде:

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

Что работает, здесь... но это просто излишний и ужасно неэффективный, ради цепочки IMO. Как правило, вам также придется вызывать dequeue или следующую функцию, но так как вы все равно удаляете элемент...

Ответ 2

Я думаю, что правильный способ сделать это - использовать метод очереди jQuery:

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

Ответ 3

Возможно, я использую устаревший jQuery, но ни один из методов, предложенных в других ответах, не работает для меня. Согласно http://api.jquery.com/delay/, задержка для анимационных эффектов.

Использование setTimeout(), однако, прекрасно работает для меня:

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

Ответ 4

И только для ударов вы можете сделать следующее, используя задержку:

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