2011-11-14 16 views
9

Ho un elemento con un sacco di elementi figlio. Voglio cancellare il contenuto di questo elemento e sostituirlo con una nuova struttura.Will jQuery metodo vuoto() cancellare i listener di eventi creati attraverso la non jquery significa

Gli elementi figlio vengono assegnati con vari ascoltatori di eventi e non tutti quegli ascoltatori vengono creati attraverso il metodo bind jQuery.

Se uso metodo vuoto di jQuery per cancellare l'elemento intende rimuovere tutti gli ascoltatori di eventi o sarà chiaro solo gli ascoltatori creato attraverso il metodo jquery legano?

risposta

0

non cancellerà i listener di eventi. Ma dovresti usare questo evento listener come evento live(), perché, stai modificando gli elementi DOM in modo dinamico.

per esempio:

$('a').live('click', function(){ 
    // your stuff 
}); 

// jQuery 1.7 richiesto per seguente frammento di codice

$(document).on('click', 'a', function(){ 
    // your stuff 
}); 
+4

Questa risposta contraddice la documentazione: http://api.jquery.com/empty/ "Per evitare perdite di memoria, jQuery rimuove altri costrutti come dati e gestori di eventi dagli elementi figlio prima di rimuovere gli elementi stessi. Se vuoi rimuovere elementi senza distruggere i loro dati o i gestori di eventi (in modo che possano essere aggiunti nuovamente in seguito), utilizzare .detach() invece. " – umassthrower

3

È possibile separare tutti gli ascoltatori di un oggetto con il .unbind() e lasciare i params vuoto

Se si desidera rimuovere tutti i figli di un elemento. solo utente $ ("# parent"). children(). remove();

Con la dal vivo() e die() metodi che è possibile aggiungere eventhandlers agli elementi che ancora non esiste ancora. con $ ("elemento "). vive (" click", function() {}) aggiunge una funzione per tutti gli oggetti .element che sono attualmente nel codice HTML o coloro che vengono aggiunti in futuro.

+7

La documentazione vuota() di Jquery lo afferma. "Per evitare perdite di memoria, jQuery rimuove altri costrutti come dati e gestori di eventi dagli elementi figlio prima di rimuovere gli elementi stessi." Non dovrebbe essere sufficiente invocare il metodo empty()? Perché devo invocare unbind? – Mandai

+2

Sì, in effetti, .empty() farà tutto al di sopra del suo numero, ad ogni bambino. Se stai usando .empty() non hai bisogno di chiamare tu stesso .ubind(). Dissocerà gli eventi e cancellerà tutti i dati salvati all'interno dei nodi. – Niels

12

Come molti commentatori hanno detto, la documentazione jQuery dicono che vuota() effettivamente rimuovere i gestori di eventi: http://api.jquery.com/empty/

Forse che non era il caso in cui tale domanda è stata pubblicata, ma questa pagina è il primo colpo su Google.

+0

Appena sperimentato, jQuery 1.12 'empty()' rimuove davvero gli ascoltatori. – Risadinha

Problemi correlati