2010-05-04 24 views
10

Oh Dios aquí mucho hoy - UyjQuery eliminar .Append después de 5 segundos

La gente, la mejor manera de hacer esto:

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

(que los bits hecho)

pero luego retirar el Agregar después de decir 5 segundos para que si una persona vuelve a enviar un formulario (permitido), el apéndice no continúe agregando el texto? es decir, actualiza una vez "Sus servicios han sido actualizados", dos veces leería "Sus servicios han sido actualizados Sus servicios han sido actualizados" pero yo solamente quisiera que sus servicios se han actualizado para mostrar una vez

Respuesta

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

Sé que parece raro ... Lo hago de esta manera por la autocontención. El apéndice se realiza inmediatamente cuando se llama a esa función anónima ... ese elemento anexo se guarda como el en ese ámbito anónimo, que se elimina cuando el timeout se activa después de 5000 ms.

Editar:

edité la función anterior para que no se destruya el elemento padre (lo siento por eso)

+0

muy elegante OMI, a "raro" Matt – dlamotte

+0

un sueño, estoy de acuerdo con xyld no "raro" – RussP

+0

Gracias, espero que funcione para usted. Por favor, asegúrese de usar mi última edición ... ¡parece que los fragmentos anteriores están matando a los elementos principales! – Matt

0

No estoy seguro del contexto aquí, pero habría que trabajar para hacer , diga

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

y luego elimine esa etiqueta ID'd particular luego?

0
// 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(); }); 
+0

Estás anulando el método jQuery .after aquí. http://api.jquery.com/after/ – BBonifield

+0

¡Es cierto! Renombrado por supuesto. Lo siento por eso ... –

0

Usted podría considerar doTimeout plug-in de Ben Alman - http://benalman.com/projects/jquery-dotimeout-plugin/

$j('<span>Your services have been updated</span>') 
    .appendTo('.done') 
    .doTimeout(5000, 'remove'); 
+0

por qué usar el complemento si puedes usar .delay (5000) –

+0

delay() solo funciona eventos que se colocan en la cola de efectos. –

+0

y así se puede utilizar! –

0

me gusta este método que utiliza un breve desvanecimiento antes de quitar el lapso. También elimina los mensajes anteriores antes de anexar.

$("<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); 
    } 
); 
2

Sin embargo, otra solución :) ¿Qué código hace:

  1. crea un elemento oculto <lapso>
  2. lo anexa al elemento con clase '-comentario .Add'.
  3. Se desvanece en el nuevo tramo,
  4. después de 4.5sec el nuevo tramo se desvanece y se elimina.

    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); 
        }); 
    
Cuestiones relacionadas