2011-02-25 5 views
1

Je suis en train de faire des ajouts dhtml avec la mise en cache. Après avoir ajax-télécharger une page d'intérêt, je stocke le contenu dans un tableau de variablesjQuery click() ne reste pas après DHTML

HistoryCache[url].load(url, handleRSX); 

(cette partie fonctionne très bien)

Ensuite j'effectuer un lien fixatrice:

$('a', HistoryCache[url]).click(...) 

... est le code qui convertit un lien normal à mon appel ajaxy.

Après tout cela, j'ai besoin de .append() mon nouveau contenu à un div qui est spécialement conçu pour contenir les nouveaux éléments. Avant d'ajouter I .remove() quel que soit le contenu était là avant.

Problème: Lorsque l'URL est dans mon HistoryCache je ne .load(), et je ne fixe pas les liens via .click(). Je prends simplement le contenu dans la cache et le mets dans mon support. À ce stade, les liens sont et non fixe, et en fait changer le navigateur pour le lien prévu plutôt que d'appeler ma fonction.

Question: Pourquoi le .click() ne reste dans le tableau de cache stocké après son été .removed() et re .append() ed?


oublié de mentionner que j'ai résolu en changeant mon clic override au code HTML de this.onclick = function... natif au lieu de $(this).click(function(){});

Répondre

4

Sur .remove() tous les événements jQuery s'y rattachent sont enlevés intentionnellement pour éviter les fuites de mémoire. Si cela n'était pas fait, jQuery perdrait de la mémoire. Pour contourner cela avec jQuery, vous pouvez utiliser .live() ou .delegate(). Les deux fonctionnent en propageant les événements plus haut du DOM que votre élément lié (le document dans le cas de live et l'élément spécifié dans le cas du délégué) et fonctionnera après la suppression et l'ajout.

+1

Merci ne le savais pas! jQuery suggère également [.detach()] (http://api.jquery.com/detach/) – Mikhail

+0

Sur une note de côté ... pouvez-vous fuir la mémoire dans le bon sens? – Mikhail

+0

@Mikhail - Je suppose que non. La fuite qui se produirait avec les événements liés à jQuery est plutôt circulaire, mais elle conserve les objets DOM ainsi que leurs événements en vie. – justkt

Questions connexes