Das jQuery live-Event

Werbung

Dieser Beitrag nimmt am Dr. Web Autorenwettbewerb teil. Sie helfen dem Autor durch Ihr Feedback und Ihre Kritik in Form eines Kommentars. Diese fließen ebenso wie der erzielte Traffic und eventuelle Verlinkungen in die Entscheidung über die zu gewinnenden Preise ein.

von Michael Dietz

Jedem der jQuery schon einmal benutzt hat dürften sie bekannt sein: Events wie “click” oder “mouseover”. In den meisten Fällen sind sie auch völlig ausreichend um den gewünschten Effekt zu erzielen. Allerdings gibt es Ausnahmen, bei denen sie scheinbar nicht funktionieren, wie das folgende Beispiel zeigt.

Gegeben ist eine Liste mit einem Listeneintrag. Bei einem Klick auf einen Eintrag soll die Liste um einen weiteren Punkt ergänzt werden. Der HTML-Code dazu sieht so aus:

<ol>
	<li>Klick mich</li>
</ol>

Um die Liste zu erweitern, verwenden wir zunächst das click-Event und fügen mit .append(…) ein neues <li>-Element am Ende der Liste ein. Daraus ergibt sich folgender jQuery-Code:

$(function() {
	$("li").click(function() {
		$("ol").append("<li>Neuer Eintrag, klick mich</li>");
	});
});

Klickt man nun auf den ersten Listenpunkt, wird die Liste wie erwartet um einen Eintrag erweitert. Das ganze sieht dann in etwa so aus:

  1. Klick mich
  2. Neuer Eintrag, klick mich

Bei einem Klick auf den zweiten Eintrag passiert jedoch überhaupt nichts. Der Grund dafür ist, dass mit $(“li”).click(…) nur diejenigen <li>-Elemente erfasst werden, die zum Zeitpunkt des Aufrufs im DOM vorhanden sind.

Da wir die .click(…) Funktion aber direkt aufrufen, nachdem das Dokument geladen wurde, trifft dies nur auf den ersten Listenpunkt zu (zur Erinnerung: $(function() {…}); wird ausgeführt, wenn das Dokument geladen ist). Unsere Funktion wird daher auch nur bei einem Klick auf das erste <li>-Element ausgelöst.

Abhilfe schafft hier das seit jQuery 1.3 verfügbare live-Event. Im Gegensatz zu .click erwartet .live jedoch zwei Parameter. Der erste Parameter gibt die Art des Events an während der zweite die Funktion festlegt, die beim Eintreten des Events ausgeführt werden soll. Wir ersetzen also lediglich .click(function() { durch .live(“click”, function() { und erhalten folgenden Code:

$(function() {
	$("li").live("click", function() {
		$("ol").append("<li>Neuer Eintrag, klick mich</li>");
	});
});

Klickt man jetzt auf einen Listenpunkt, wird die Liste wie gewünscht erweitert, auch wenn es sich bei dem Eintrag selbst um einen neu hinzugefügten handelt. Mit dem live-Event werden nämlich nicht nur die zum Zeitpunkt des Aufrufs in der DOM vorhandenen Elemente, sondern auch zukünftig vorhandene Elemente erfasst und an das Event gebunden.

Neben click unterstützt die live-Funktion derzeit außerdem folgende Events: dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress und keyup. Wem das aber noch nicht ausreicht, der sollte sich das liveQuery-Plugin einmal genauer ansehen. Es funktioniert relativ ähnlich, unterstützt aber alle Arten von Events.

(sl),

Für den Wettbewerb können keine Beiträge mehr eingereicht werden, über Autoren freuen wir uns trotzdem. In dem Fall: bitte hier entlang.

Weitere Beiträge:

,

10 Kommentare zu Das jQuery live-Event

  1. Simon 8. Dezember 2009 at 16:20 #

    Danke für den Tipp!

    Das oben genannte Problem ist mir bisher nie aufgefallen, aber wenn es jetzt kommen sollte, weiß ich woran es liegt und vorallem wie ich es lösen kann.

  2. Ina Müller 8. Dezember 2009 at 16:32 #

    Danke,danke,danke…
    Ich schlag mich schon einigeZeit mit diesem Problem herum,
    diese Erklärung hilft mir wirklich weiter!

  3. TruckTurner 8. Dezember 2009 at 18:31 #

    Wie Simon bin ich bislang auch noch nicht in diese Falle getappt – aber wohl dem, der die Gefahren kennt ;)

    Danke!

  4. Ali 8. Dezember 2009 at 19:24 #

    Danke für den hilfreichen Tipp! Immer gut zu wissen, dass man nicht selbst die Ursache des Problems ist ;)

  5. Marius M 8. Dezember 2009 at 20:40 #

    Oh ja, dieses nette Problem mit dem Aufrufen von noch nicht vorhandenen Objekten hat mich am Anfang ein paar Stunden gekostet. DANKE!
    MfG
    Marius

  6. daniel g 9. Dezember 2009 at 14:57 #

    guter Tip und ein nützliches Tutorial ….

  7. Andreas K. 9. Dezember 2009 at 16:01 #

    Super Tip, gut zu wissen :)

  8. Michael Dietz 9. Dezember 2009 at 20:30 #

    Kleiner Nachtrag: Ab jQuery 1.4 wird die live-Funktion alle Arten von Events unterstützen.

    http://blog.jquery.com/2009/12/04/jquery-14-alpha-1-released/

  9. Matthias 10. Dezember 2009 at 09:39 #

    Danke für den Tip. Ich arbeite nun schon eine Weile mit jQuery, aber das live-Event muss sich meinen Blicken bis dato entzogen haben. ;)

  10. Julian E 10. Dezember 2009 at 14:13 #

    mhm naja, typisch jquery benutzer :D ist doch klar, dass das nicht funktioniert, ist ganz einfach ein logik-fehler!

Hinterlasse eine Antwort

Bitte bei weiteren Kommentaren per Email benarichtigen! Auch möglich: Abo ohne Kommentar.

Spam protection by WP Captcha-Free