JQuery-Elemente, die click () - Code ignorieren, wenn sie nach dem Seitenladen zum DOM hinzugefügt werden

8

Also habe ich etwas Code und ich füge ein Element zum DOM nach dem Seitenladen hinzu (der zweite Link im folgenden Beispiel), aber dieses neu hinzugefügte Element ignoriert alle dafür definierten Funktionen. Für das Beispiel unten möchte ich, dass alle Links in divs mit der Testklasse eine Warnung anzeigen. Funktioniert gut für den Link hart codiert, aber der später hinzugefügte Link ignoriert es.

%Vor%

BEARBEITEN : Ist die einzige Lösung, um es mit einem jQuery-Plugin zu abstrahieren?

    
Andrew G. Johnson 15.10.2009, 19:20
quelle

3 Antworten

14

Ihr Problem ist, dass click() einen Ereignis-Listener an jedes Element in der aktuellen übereinstimmenden Menge bindet. Es ist keine Magie und es wird den Ereignis-Listener nicht rückwirkend auf neuen Inhalt anwenden, den Sie dem DOM hinzufügen. Ihre Optionen sind:

  1. Verwenden Sie die Funktionen Live-Ereignisse in jQuery, wie andere bereits erwähnt haben.
  2. Machen Sie selbst etwas Ähnliches, indem Sie einen Click-Handler an einen gemeinsamen Vorfahren der Elemente binden, an denen Sie interessiert sind, und testen Sie dann das Ziel jedes Klicks, den Sie sehen, um festzustellen, ob Sie sich darum kümmern. Beispielsweise: %Vor%
  3. Fügen Sie im Code, der dem DOM die neuen Elemente hinzufügt, ebenfalls Ereignishandler an sie an. Beispielsweise: %Vor%
Sixten Otto 15.10.2009, 20:48
quelle
3

Wenn Sie jquery live verwenden, wird dieses Problem behoben. jquery live Bindet einen Handler an ein Ereignis (wie einen Klick) für alle aktuellen und zukünftigen übereinstimmenden Elemente.

%Vor%     
TStamper 15.10.2009 19:25
quelle
2

Dein Code kann aufgeräumt werden und sich so verhalten, wie du es dir erhoffst:

%Vor%

Hinweis: Live ist auf jQuery 1.9

nicht verfügbar     
Agent_9191 15.10.2009 19:24
quelle

Tags und Links