2013-04-14 7 views
6

Cosa succede all'evento quando il suo elemento è stato distrutto? Per quanto ne so, jQuery ha ancora l'evento nel suo "repository" globale. Nel mio caso, vengono creati molti elementi, associati a un evento e distrutti nuovamente ...Gli eventi saranno automaticamente non legati dopo che l'elemento è stato distrutto?

Devo aver paura di alcuni problemi di memoria dopo un uso eccessivo?

+2

Se si rimuovono elementi tramite i metodi jQuery (ad es. ['.remove()'] (http://api.jquery.com/remove/) rimuove anche i gestori di eventi associati e i dati (jQuery). – nnnnnn

+0

Molto utile, grazie ... – kraftwer1

+0

A proposito, lo fa anche per elementi figlio? – kraftwer1

risposta

0

Sì. Se hai molti gestori di eventi collegati ad elementi html, dovresti rimuoverli esplicitamente (usando i metodi jQuery come remove o empty invece di es. detach o "normale" js) o cambiare la strategia "vincolante" dell'evento. Ciò che intendo è sfruttando la delega dell'evento di jQuery. In questo modo puoi cercare un antenato comune al tuo cluster di elementi bind-evento e legarlo invece all'evento. Una regola empirica è sempre quella di minimizzare il numero di gestori di eventi.

+0

Sono abbastanza sicuro (ma non certo) che questo è sbagliato. – Dave

+0

@Dave ma cosa e perché? Non sono certamente infallibile, ma questo è quello che so. Se hai qualche argomento contro di esso, fammi sentire - è l'unico modo per imparare, giusto? – guessimtoolate

+0

beh, mi riferisco al punto principale: "dovresti rimuoverli esplicitamente ...". Non credo sia necessario. Vedere la fonte qui: https://github.com/jquery/jquery/blob/master/src/manipulation.js#L96 e qui https://github.com/jquery/jquery/blob/master/src/manipulation. js # L465 (vuoto viene chiamato da tutte le funzioni che modificano il contenuto) – Dave

Problemi correlati