Rolf B: Wie prüfen, ob es EventListener schon gibt?

Beitrag lesen

Hallo Anne,

nein, addEventListener gibt nichts zurück.

Bei einer guten Programmstrukturierung sollte man nicht in die Verlegenheit kommen. Da hat man einen Initialisierungsteil, wo man Eventhandler registriert, und gut ist. Wieso musst Du einen resize-Handler „bei Bedarf nachinstallieren“?

Aber von meinem Elfenbeinturm herunter übersehe ich vermutlich die schmutzigen Details im Sumpf der Realität.

Möglichkeit 1: Führe jede Registrierung so aus. Nicht wirklich schön:

window.removeEventListener('resize', function_n1);
window.addEventListener('resize', function_n1);

Setzt voraus, dass es genau eine Handler-Funktion gibt. Remove muss genau das gleiche Funktionsobjekt bekommen wie add, sonst passiert nichts.

Möglichkeit 2: Speichere dir in einer separaten booleschen Variablen, ob Du den Eventhandler schon registriert hast. Das kannst Du, wie Jürgen schrieb, in einer Variablen tun. Du könntest dafür auch den Umstand ausnutzen, dass Funktionen in JavaScript Objekte sind, denen man jederzeit Propertys ankleben kann.

function handleResizeEvent() {
   // do something
}
handleResizeEvent.registered = false;

// an anderer Stelle
if (!handleResizeEvent.registered) {
   window.addEventListener('resize', handleResizeEvent);
   handleResizeEvent.registered = true;
}

Auch hier brauchst Du eine klar definierte Handlerfunktion.

Darf ich fragen, was Du mit dem resize-Handler tun willst? Layout ist, wenn irgend möglich, die Aufgabe von CSS, und JavaScript nimmt man nur, wenn es mit CSS gar nicht geht. Die Performance von CSS Layout ist auch wesentlich besser, weil die Layout-Engine direkt in C++ oder ähnlichem geschrieben ist und auf interne Daten des Layout zugreifen kann, statt über das DOM API zu gehen.

Rolf

--
sumpsi - posui - obstruxi