In jQuery, wenn Sie ein Element entfernen wird auf sie alle Ereignisse entfernt werden?

StackOverflow https://stackoverflow.com/questions/1538243

  •  20-09-2019
  •  | 
  •  

Frage

Zum Beispiel, wenn ich eine Verbindung mit dem folgende Ereignisse gebunden zu ihm habe:

$("a.d").bind("click", this, onDelete);

Und später tun:

$("a.d").remove();

Ist das in Ordnung? Oder ist es Ursache eines Speicherlecks und ich brauche unbind 1. anrufen?

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Ich habe es nicht getestet, aber ich glaube, dass ein Element entfernt wird seine Event-Handler entbinden. Ich komme zu diesem Schluss aus der jQuery API-Dokumentation (Suche nach Entfernen), die besagt, dass, wenn Sie verschieben mögen ein Element aus einem Teil des DOM zu einem anderen, dass:

$("#foo").remove().appendTo("#bar");

sollten geschrieben werden

$("#foo").appendTo("#bar");

zu vermeiden, dass die Event-Handler zu verlieren.

Andere Tipps

Von jQuery docs für remove ()

  

Entfernt alle angepassten Elemente aus dem   DOM. Dies nicht entfernt sie aus   das jQuery-Objekt, so dass Sie verwenden   die angepassten Elemente weiter. Hinweis   dass diese Funktion beginnend mit 1.2.2   werden auch alle Event-Handler entfernen   und intern Daten zwischengespeichert.

Die Antwort ist ja, solange das Ereignis mit jQuery befestigt war. Wenn etwas angebracht wie „Onclick“ Ich glaube nicht, es wird.

Dieser Artikel beschreibt einige davon. Es definiert auch eine rekursive Funktion alle Click-Ereignisse für ein Element und alle seine Kinder zu entfernen. Es deckt jQuery-Handler klicken sowie Handler definiert mit Onclick so sind Sie.

http: / /www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

function RecursiveUnbind($jElement) {
    // remove this element's and all of its children's click events
    $jElement.unbind();
    $jElement.removeAttr('onclick');
    $jElement.children().each(function () {
        RecursiveUnbind($(this));
    });
}

Um die Funktion im vorherigen Beispiel verwendet wir würden die Funktion nennen es die „Container“ div als Objekt jQuery übergeben.

RecursiveUnbind($('#container'));

Für das Protokoll, müssen Sie sich keine Sorgen um Speicherlecks in Javascript. (Chill-Mann, nicht c ++!)

Der JavaScript-Engine des Browsers verwaltet alle Objekte und Müll sammelt sich. Wenn ich Objekte sagen, dass Mittel Event-Handling-Funktionen auch, weil Funktionen auch in JavaScript-Objekte sind.

Unrelated: Ich liebe es, wie alles, was ein Objekt in Javascript ist: D

Cheers!
JRH

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top