2011-09-29 15 views
15

Esiste un modo ufficiale per collegarsi a jQuery.remove() in modo che una funzione possa essere chiamata prima/dopo?jQuery remove() callback?

Ho un sistema in cui determinati gestori sono collegati ad elementi e talvolta questi elementi vengono rimossi (ad esempio un widget dell'interfaccia utente il cui elemento principale viene rimosso da qualche altra azione sulla pagina). Se i gestori possono essere informati che il loro elemento principale è stato rimosso, posso eseguire un po 'più facilmente le routine di pulizia.

+0

Ho appena guardato nel codice relativo, https://github.com/jquery/jquery/blob/master/src/manipulation.js#L168, ed è in realtà solo un involucro sottile intorno parent.removeChild . Quindi vai con la risposta di @ Drew. – Boldewyn

+0

Hai trovato qualche soluzione, oltre a completare l'evento di rimozione originale? – Mahn

risposta

5

Utilizzare un evento personalizzato, collegare i gestori all'evento personalizzato attivato prima/dopo la rimozione. Ad esempio,

$(document).bind('remove', function(event, dom){ 

    $(document).trigger('beforeRemove', [ dom ]); 
    $(dom).remove(); 
    $(document).trigger('afterRemove', [ dom ]); 
}); 

$(document).trigger('remove', 'p'); //Remove all p's 
17

è possibile utilizzare jQuery.when():

$.when($('div').remove()).then(console.log('div removed')); 
+0

Mi spiace, forse non è una buona risposta nel caso attuale, ma è stata utile per me. –

+0

Questo ha portato a termine il lavoro. – tponthieux

+3

Questo lavoro viene eseguito se si sta cercando un modo per rimuovere l'elemento * immediatamente * e avviare un richiamo di richiamata dopo aver effettuato la rimozione. Ma rimuovere l'evento in jQuery è un evento sincrono, quindi per questo scopo la risposta qui è ridondante: puoi ottenere esattamente la stessa cosa facendo: '$ ('div'). Remove(); console.log ('div rimosso'); ' – Mahn

2

Ecco un hack nifty - si potrebbe desiderare di fare un tentativo.

$('div').hide(1, function(){ 
    // callback 
    $(this).remove(); 
});