Die Methode jQuery on() bindet keine Ereignisse wie live()

Lesezeit: 3 Minuten

Benutzer-Avatar
hsz

Wie auf beschrieben http://api.jquery.com/live/:

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

Recht. Also statt

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

Ich sollte verwenden:

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

Es bindet das Ereignis jedoch nicht an später erstellte Elemente on() Berufung. Also ist es wirklich besser live() Methode ?

Übersehe ich etwas?

  • mögliches Duplikat von jQuery 1.7 – Live() in on() umwandeln

    – Felix Klinge

    24. April 2012 um 9:44 Uhr

  • Wenn Sie in der von Ihnen verlinkten Dokumentation etwas weiter lesen (dritter Absatz): „Umschreiben der .live() Methode in Bezug auf ihre Nachfolger ist einfach; Dies sind Vorlagen für äquivalente Aufrufe für alle drei Methoden zum Anhängen von Ereignissen: $(document).on(events, selector, data, handler); // jQuery 1.7+.

    – Felix Klinge

    24. April 2012 um 9:45 Uhr


  • @FelixKling Danke, vorher nicht gefunden.

    – hsz

    24. April 2012 um 9:45 Uhr


  • Schön, dass Sie das gefragt haben. Es wird häufig vorgeschlagen, dass sie gleich sind, wenn sie es wirklich nicht sind (und es ist meiner Meinung nach eine ärgerliche Änderung).

    – Iain Collins

    29. Mai 2013 um 20:01 Uhr

Benutzer-Avatar
Sergi Papaseit

Benutzen on in gleicher Weise wie live verwendet, um zu arbeiten, müssen Sie es wie folgt verwenden:

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

So binden Sie die on Handler zum document sich selbst (oder eigentlich das Containerelement, in dem die neuen Elemente “erscheinen” — Danke an @devnull69 für die Klarstellung), dann übergeben Sie ihm einen Ereignistyp und den Selektor.

Auf halbem Weg finden Sie einige Beispiele live Dokumentationsseite.

  • Es muss nicht unbedingt sein $(document). Der erste Selektor kann ein beliebiges bereits vorhandenes Eltern-/Containerelement des dynamisch erstellten Elements sein

    – devnull69

    24. April 2012 um 9:48 Uhr


  • Ok, stimmt, solange die neuen Elemente in diesem übergeordneten Element/Container erscheinen. – Ich habe meine Antwort aktualisiert; Danke.

    – Sergi Papaseit

    24. April 2012 um 9:51 Uhr


  • In der Tat sollten Sie versuchen, die Verwendung zu vermeiden $(document).on(...) in diesen Fällen, da dies in der Vergangenheit zu Problemen mit Safari-Browsern geführt hat click Ereignisse sprudelten nicht bis zu document: stackoverflow.com/questions/10165141/…

    – EleventyOne

    13. Januar 2014 um 8:57 Uhr


  • Wenn der Körper leer geladen wird und dann alles dynamisch geladen wird, scheint mir die ‘on()’-Funktion immer problematisch zu sein, während die ‘live()’ weiterhin gut funktioniert. Die ‘on()’-Funktion ist ein absolutes Biest, wenn alles dynamisch ist! In einem solchen Fall funktioniert es im Gegensatz zu dem, was @devnull69 oben angegeben hat, nur, wenn ich ‘$(document)’ verwende.

    – Jeach

    3. März 2014 um 5:22 Uhr


  • … was nicht im Widerspruch zu dem steht, was ich oben gesagt habe 🙂

    – devnull69

    3. März 2014 um 11:29 Uhr

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

Benutzer-Avatar
bleckert

Als Delegat verwenden()

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

BEARBEITEN: Damit es jeder versteht, ist bei der Verwendung von “delegate()” der Selektor das erste Argument und bei “on()” das zweite.

  • .delegate() erwartet eigentlich den Selektor als erstes Argument und das zweite das Ereignis. Die Reihenfolge der Argumente ist daher unterschiedlich.

    – Felix Klinge

    24. April 2012 um 9:46 Uhr

  • Ja, aber das Konzept ist das gleiche.

    – tbleckert

    24. April 2012 um 9:48 Uhr

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

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

1178720cookie-checkDie Methode jQuery on() bindet keine Ereignisse wie live()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy