JQuery удалить .append через 5 секунд

О, черт возьми, здесь много сегодня - oops

Люди, лучший способ сделать это:

$j('.done').append('Your services have been updated');

(эти биты выполнены)

но затем удалите добавление, скажем, через 5 секунд, чтобы, если человек повторно отправил форму (разрешено), приложение не продолжает добавлять текст? i.e обновляется после того, как "ваши службы были обновлены", дважды будет читаться "Обновлены ваши услуги. Обновлены ваши услуги", но я бы хотел, чтобы ваши службы были обновлены, чтобы показывать один раз

Ответ 1

(function (el) {
    setTimeout(function () {
        el.children().remove('span');
    }, 5000);
}($j('.done').append('<span>Your services have been updated</span>')));

Я знаю, что это выглядит странно. Я делаю это так, чтобы сдерживать себя. Приложение немедленно выполняется, когда эта анонимная функция вызывается... этот добавленный элемент затем сохраняется как el в этой анонимной области, которая сама удаляется, когда timeout срабатывает после 5000 мс.

Edit:

Я отредактировал функцию выше, чтобы она не уничтожала родительский элемент (извините за это)

Ответ 3

Еще одно решение:) Какой код:

  • создает скрытый <span> Элемент
  • добавляет его к элементу с классом .add-comment.
  • Затухает в новом диапазоне,
  • после 4.5sec новый диапазон исчезает и удаляется.

    jQuery('<span />',{ style:'display:none' })
        .html('Mesaj trimis...')
        .appendTo(jQuery('.add-comment'))
        .fadeIn('slow', 
            function(){
                var el = jQuery(this);
                setTimeout(function(){
                    el.fadeOut('slow',
                        function(){
                            jQuery(this).remove();
                        });
                }, 4500);
        }); 
    

Ответ 4

Я не уверен в контексте здесь, но будет ли это работать, скажем

<span id="special_message">Your services have been updated.</span>`

а затем удалить этот тег ID'd позже?

Ответ 5

// a little jQuery plugin...
(function($){ 
    $.fn.timeout = function(ms, callback)
    {
        var self = this;
        setTimeout(function(){ callback.call(self); }, ms);
        return this;
    }
})(jQuery);

// ...and how to use it.
$("<span>Your services have been updated</span>")
    .appendTo('.done')
    .timeout(5000, function(){ this.remove(); });

Ответ 7

Мне нравится этот метод, который использует короткое затухание перед удалением диапазона. Он также удаляет предыдущие сообщения перед добавлением.

$("<span class='js_msg'>Your services have been updated</span>")
    .appendTo($j('.done').children("span.js_msg").remove().end())
    .each(function(){
        var self = $(this);
        setTimeout(function () {
            self.fadeOut(500,function(){
                self.remove();
            });
        }, 4500); 
   }
);