2013-02-26 4 views
7

Soweit ich weiß, die click() Methode funktioniert nicht für mich, weil das Element, das ich klicke, nicht beim Laden der Seite (DOM bereit).on() vs live() klicken Funktion auf Element, das noch nicht existiert

Ich habe viele Antworten gefunden, die darauf hinweisen, .live('click',function(){...}) zu verwenden. Das funktioniert großartig!

jedoch .live() wie von jQuery 1.7 abgeschrieben

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

Weiß jemand, warum, oder was ich tun kann .on() verwenden ähnlich .live() (das funktioniert)?

+0

@ wrschneider99 ja ja! –

Antwort

20

Da on() beide ersetzt bind() und live(), benötigen Sie einen dritten Parameter übergeben, um zu Verwendung von Ereignis zu machen Delegation (in anderen Worten, es wie die alten live() funktioniert):

$('#container').on('click', '.element', function(){ }); 
+1

Danke, was ist, wenn '# container' dasselbe Element wie' .element' ist? Ich habe versucht, das gleiche Element an beiden Orten zu verwenden, aber kein Glück:/ –

+2

@iight Dann wird es nicht funktionieren. '# container' kann nicht dynamisch generiert werden. Wählen Sie, wie in j08691 angegeben, ein Umbruchelement so nah wie möglich an dem dynamisch hinzugefügten Element aus, um die Leistung zu verbessern. – Johan

+0

muss ein Elternelement sein, richtig? –

7

Sie in der Lage sein sollte, ein Format wie folgt zu verwenden:

$(document).on('click','element', function(){...}); 

Wo element ist das Element, das Sie binden möchten das Click-Ereignis zu. Die Verwendung von document ist ein Worst-Case-Szenario, da Sie idealerweise ein Element verwenden möchten, das vorhanden ist, wenn das DOM geladen wird, das sich in der DOM-Hierarchie näher an dem Element befindet, das dynamisch geladen wird.

Aus dem jQuery .on() docs:

Eventhandler nur auf die aktuell ausgewählten Elemente gebunden ist; Sie müssen auf der Seite zu dem Zeitpunkt vorhanden sein, zu dem der Code den Aufruf von .on() aufruft. Um sicherzustellen, dass die Elemente vorhanden sind und ausgewählt werden können, führen Sie das Ereignis in einem Dokument-Ready-Handler für Elemente ein, die sich im HTML-Markup auf der Seite befinden. Wenn neuer HTML-Code in die Seite eingefügt wird, wählen Sie die Elemente aus und hängen Sie Ereignishandler an, nachdem der neue HTML-Code auf der Seite platziert wurde.

+1

Danke! das funktioniert, aber jetzt muss ich nur die gesamte $ (Dokument) Bindung recherchieren. Das behebt das Problem jedoch! –

Verwandte Themen