jQuery(document).unbind() löscht alle entsprechenden live event handler

Datum: 24. Januar 2012
Autor*in: Axel Güldner


Beim Deployment des Bremen Portals ist mir heute eine Eigenheit von jQuery aufgefallen, der ich mir bisher nicht bewusst war.

Auf der Startseite werden im Keyvisual kleine Teaserfenster bei Mouseover über so rote Infobubbles geöffnet. Die BTZ hatte sich nun gewünscht, dass diese Infofenster wieder geschlossen werden, sobald der User irgendwo außerhalb des Fensters klickt.

Gelöst habe ich dies, in dem ich ein jQuery(document).bind(‚click‘, function(e){ … }) aufrufe, sobald ein Fenster geöffnet wird. Damit dieser Eventhandler nicht bei jedem sich neu öffnenden Fenster erneut auf document angelegt wird (was zur Folge hätte das die definierte Funktion mehrfach ausgeführt würde), habe ich innerhalb der aufgerufenen Funktion noch ein jQuery(document).unbind(‚click‘) ergänzt.

Das hat auch super funktioniert und man könnte meinen das war es dann auch. Nach dem Deployment fiel mir auf, das sich auf einmal die große Karte nicht mehr öffnen ließ. Diese wird mittels Live Event auf einem Link geöffnet, also etwas in der Art: jQuery(‚.mapOpener‘).live(‚click‘, function() {}). Das hat bisher auch immer geklappt, erst nach diesem Deployment ging es nicht mehr.

Nach etwas Nachforschen habe ich herausgefunden, dass ein unbind auf jQuery(document) alle entsprechenden live Events löscht, welche auf der gleichen Seite irgendwo registriert wurden. Scheinbar legt jQuery diese Live Events im Hintergrund, als normale Events auf document ab. Eine Art Workaround, um live Events in JavaScript zum funktionieren zu bringen.

Dies wurde auch schon von der jQuery Crew diskutiert (http://bugs.jquery.com/ticket/7520) und man kam überein, dass dies das korrekte Verhalten ist. Es wird also keinen Patch geben, der dieses Problem behebt.

Also immer schön aufpassen wann ihr ein unbind auf document ausführt.


Dieser Artikel wurde verschlagwortet unter:


Kommentare

Selber kommentieren:






Weitere Beiträge zum Thema Technologie


# Teaminterview | Was passiert eigentlich in der Portalentwicklung?

Autor*in: Christine Pfleger


infomax   //   Technologie   //   Über den Tellerrand


Stefan Oswald und Simon Schindlatz, Portalentwickler bei infomax

Was macht eigentlich ein*e Portalentwickler*in bei infomax? Welche Fähigkeiten sind im Job hilfreich, welche Tools nutzt das Team, und wie sieht die technische Entwicklungsumgebung aus? Wir haben mit Benni, Simon und Stefan über ihre Aufgaben im Portalentwicklungs-Team bei infomax gesprochen.


Beitrag lesen
23
MRZ
23

PHP-Funktionen in PHPUnit testen

Autor*in: Benjamin Hofmann


Technologie


Gestern bin ich auf eine interessante Erweiterung für PHPUnit gestoßen, die es erlaubt auch reine Funktionen als Mock-Objekte anzulegen und deren Verhalten damit zu testen: PHP-Mock bzw. dessen Erweiterung für die Nutzung in PHPUnit. Damit kann man dann sehr bequem auch interne Funktionen testen, z.B. file_get_contents() oder auch ein mail(). Ein so gearteter Test könnte …


Beitrag lesen
13
JAN
17

Grunt concurrent und time-grunt

Autor*in: Florian Müller


Technologie


Gestern Abend bin ich auf einen Artikel gestoßen, welcher sich mit der Optimierung von Grunt Tasks beschäftigt hat. Vieles davon ist schon im Einsatz, aber eins hat dann doch noch gefehlt – die Parallelisierung. Dies habe ich heute morgen testweise bei einem Projekt integriert. Um vergleichbare Ergebnisse zu bekommen, welche unabhängig von anderen Build Tasks des …


Beitrag lesen
29
SEP
16

OOP 2014

Autor*in:


Projekte // Technologie // Über den Tellerrand


Auf geht’s zu Tag 2 auf der OOP in München. Dieses Jahr steht die Konferenz unter dem Motto: Complexity – Managing Today’s Challenges. Und dieses Leitthema wurde gestern in zwei Keynotes von Tim Mattson (Intel Corp.) und Glenda Eoyang (Human System Dynamics Institute) bereits in seinen vielschichtigen Facetten aufgegriffen. Die Quintessenz: Komplexität (in IT-Projekten) lässt …


Beitrag lesen
05
FEB
14