2012-04-24 10 views
30

beschrieben, wie auf http://api.jquery.com/live/:jQuery auf() -Methode keine Ereignisse wie Live-bind() hat

Ab jQuery 1.7, die .live() Methode ist veraltet. Verwenden Sie .on(), um Ereignishandler anzuhängen.

Richtig. Also statt

$('.dynamicallyCreatedElement').live('click', function(){ 
    console.log('click'); 
}); 

soll ich verwenden:

$('.dynamicallyCreatedElement').on('click', function(){ 
    console.log('click'); 
}); 

aber es Ereignis Elemente nicht nach on() Berufung erstellt binden. Also ist es wirklich besser live() Methode?

Fehle ich etwas?

+1

möglich Duplikat [jQuery 1.7 - Drehen Live() in on()] (http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live-in-on) –

+1

Wenn Sie in der Dokumentation, mit der Sie verlinkt sind (dritter Absatz), etwas weiterlesen: * "Die Methode' .live() 'in Bezug auf ihre Nachfolger umschreiben ist einfach, das sind Vorlagen für äquivalente Aufrufe für alle drei Ereignisanhangsmethoden: '$ (Dokument) .on (Ereignisse, Selektor, Daten, Handler); // jQuery 1.7 +' "*. –

+0

@FelixKling Danke, habe ich nicht vorher gefunden. – hsz

Antwort

63

Um on in der gleichen Weise wie live verwenden verwendet, um Sie es verwenden müssen arbeiten:

$(document).on("click", ".dynamicallyCreatedElement", function() { 
    console.log('click'); 
}); 

Sie die on Handler an die document selbst So binden (oder das Containerelement tatsächlich, wo die neue wlements werden "erscheinen" - Danke an @ devnull69 für die Klärung, dann übergib es einen Ereignistyp und den Selektor.

Sie finden ein paar Beispiele auf halbem Weg durch die live Dokumentationsseite.

+7

Es muss nicht unbedingt "$ (Dokument)" sein. Der erste Selektor kann ein bereits vorhandenes Eltern-/Containerelement des dynamisch erstellten Elements sein. – devnull69

+0

Ok, true, solange die neuen Elemente in diesem Eltern/Container angezeigt werden. - Ich habe meine Antwort aktualisiert; Danke. –

+0

In diesem Fall sollten Sie versuchen, die Verwendung von '$ (document) .on (...)' zu vermeiden, da dies in der Vergangenheit zu Problemen mit Safari-Browsern geführt hat, bei denen Klickereignisse nicht vollständig durchgeblubbert wurden bis zu "Dokument": http: // stackoverflow.com/questions/10165141/jquery-on-und-delegate-doesnt-work-on-ipad – EleventyOne

13
$('#closestStaticParent').on('click', '.dynamicallyCreatedElement' function(){ 
    console.log('click'); 
}); 
4

Verwendung als Delegierter()

$('body').on('click', '.dynamicallyCreatedElement', function() { 
}); 

EDIT: Nur damit jeder bekommt es, wenn Delegat() verwendet der Selektor ist das erste Argument und on() es ist die zweite.

+0

'.delegate()' tatsächlich erwartet den Selektor als erstes Argument und die Zweitens, um das Ereignis zu sein. Die Reihenfolge der Argumente ist daher anders. –

+0

Ja, aber das Konzept ist das gleiche. – tbleckert

2

Ich habe die Notwendigkeit gefunden, diesen Ansatz zu verwenden, um mit auf:

$('#container').on('click','.dynamicallyCreatedElement',function(){ 
    console.log('click'); 
}); 
Verwandte Themen