Ich habe den folgenden JavaScript-Code:ändert Verweis auf bestehendes Ereignisse
var MyGlobalRef = (function() {
function init(obj1, obj2) {
prepareEvents(obj1);
prepareEvents(obj2);
function prepareEvents(obj) {
var handleMouseUp = function (evt) {
// do work with obj
};
obj.addEventListener('mouseup', handleMouseUp);
}
}
return {
init: init
}
})();
In meiner Haupt-Seite, ich bin die init
Funktion wie diese häufig Aufruf:
function moveNext(){
MyGlobalRef.init(getNewObj1(), getNewObj2());
}
Mein Problem ist, dass auf die Funktion moveNext()
tendiere ich dazu, die vorhandenen Objekte zu ersetzen, was bedeutet, dass es immer nur 2 Objekte auf der Seite gibt. Je mehr ich jedoch moveNext
rufe, desto mehr Event-Listener werden generiert. Also, wenn ich 3 mal moveNext
3 Mal, das Mouse-up-Ereignis dreimal pro Maus feuert. Die offensichtliche Lösung besteht darin, nur das erste Mal addEventListener
anzurufen. Das Problem dabei ist jedoch, dass obj
(das im Mouse-up-Ereignis verwendet wird) nicht aktualisiert wird und immer noch auf das Original obj
verweist. Außerdem habe ich removeEventListener
nicht verwendet, weil ich keinen Verweis auf obj
habe, sobald es initiiert wird.
Lassen Sie Ihre 'init' -Funktion' destroy' anstelle von 'undefined' zurückgeben. Wenn Sie 'init' aufrufen, bekommen Sie eine Funktion' destroy' zurück, die Sie aufrufen können, um 'removeEventListener' für Ihre' obj1' und 'obj2' auszuführen. Damit Sie die gespeicherte 'destroy'-Funktion aufrufen können, bevor Sie' MyGlobalRef.init' anrufen. – anvk