on () vs. live () klicke auf die Funktion, die noch nicht existiert [duplizieren]

7

Soweit ich weiß, funktioniert die Methode click() nicht, weil das Element, auf das ich klicke, beim Laden der Seite nicht existiert (DOM ready).

Ich habe viele Antworten gefunden, die vorschlagen, .live('click',function(){...}) zu verwenden. Das funktioniert super!

.live() wird jedoch ab jQuery 1.7

abgeschrieben

Also, ich habe versucht, stattdessen .on('click',function(){...}) zu verwenden, aber es funktioniert nicht (verhält sich genauso wie .click() .

Weiß jemand warum, oder was kann ich tun, um .on() ähnlich wie .live() zu benutzen (was funktioniert)?

    
d-_-b 26.02.2013, 15:12
quelle

2 Antworten

20

Da on() sowohl bind() als auch live() ersetzt, müssen Sie einen dritten Parameter übergeben, um die Ereignisdelegierung zu nutzen (mit anderen Worten, damit sie wie die alte live() funktioniert):

%Vor%     
Johan 26.02.2013, 15:13
quelle
7

Sie sollten in der Lage sein, ein Format wie dieses zu verwenden:

%Vor%

Dabei ist element das Element, an das das Click-Ereignis gebunden werden soll. Die Verwendung von document ist eine Art Worst-Case-Szenario, da Sie idealerweise ein Element verwenden möchten, das beim Laden des DOM vorhanden ist und in der DOM-Hierarchie näher an dem Element liegt, das dynamisch geladen wird.

Aus den jQuery .on () Dokumenten:

  

Event-Handler sind nur an die aktuell ausgewählten Elemente gebunden; Sie   muss zu dem Zeitpunkt auf der Seite vorhanden sein, zu dem Ihr Code den Aufruf von .on () aufruft.   Um sicherzustellen, dass die Elemente vorhanden sind und ausgewählt werden können, führen Sie das Ereignis aus   Bindung innerhalb eines Dokument-Ready-Handlers für Elemente, die sich in der   HTML-Markup auf der Seite. Wenn neues HTML in die Seite eingefügt wird,   Wählen Sie die Elemente aus und fügen Sie Ereignishandler nach dem neuen HTML-Code hinzu   in die Seite gelegt.

    
j08691 26.02.2013 15:14
quelle

Tags und Links