jQuery 'on' registriert sich nicht im dynamisch generierten modalen Popup

Ich hatte den Eindruck, dass jQuery'son event handler sollte in der lage sein, auf dynamisch erzeugte elemente zu 'lauschen' UND das verhalten von zu ersetzenlive. Was ich jedoch erlebt habe, ist das Verwendenon erfasst das Klickereignis während der Verwendung von nichtlive ist erfolgreich!

Der knifflige Aspekt meiner Situation ist, dass ich nicht nur dynamisch Inhalte erstelle, sondern dies auch über AJAX mache.get() aufrufen und das resultierende HTML in ein Modal einfügen.dialog() jQueryUI-Popup.

Hier ist eine vereinfachte Version dessen, was ich erreichen wollte$(document).ready(...) ):

$.get("getUserDataAjax.php", queryString, function(formToDisplay) {
    $("#dialog").dialog({
        autoOpen: true,
        modal: true,
        buttons...
    }).html(formToDisplay);
});
$(".classThatExistsInFormToDisplay").on("click", function() {
    alert("This doesn't get called");
});

Aus der Dokumentation füron Ich fand dies, und so näherte ich mich dem Schreiben meineron Veranstaltung:

$("p").on("click", function(){
    alert( $(this).text() );
});

Aus irgendeinem Grundlive wird funktionieren wie ich es erwarte - wohingegenon versagt mir.

Dies ist keine Frage für "Wie kann ich es zum Laufen bringen?" weil ich das gefunden habeon wird erfolgreich sein (Capture-Klicks), wenn ich es deklariereInnerhalb dasfunction(formToDisplay) Ruf zurück.

Meine Frage ist: was ist falsch miton dass meine dynamisch erstellten Elemente nicht in einem modalen Popup gefunden werden? Meine jQuery-Instanz ist jquery-1.7.2. jQueryUI ist 1.8.21.

Hier sind zwei jsFiddles, die sich dem Problem annähern. Klicken Sie in beiden Fällen auf das Wort "Test", um das unterschiedliche Verhalten anzuzeigen. Der einzige Unterschied im Code ist das Ersetzenon zumlive.

Woherdas Klicken wird erfasst vonlive.

Woherdas Klicken wird NICHT von erfasston (Klicken Sie auf "Test - Klicken Sie auf mich", um zu sehen, dass nichts passiert.)

Mir ist klar, dass ich vielleicht nur benutzeon unangemessen oder darum gebeten, etwas zu tun, das nicht beabsichtigt war, aber ich möchte es wissenWarum Es funktioniert nicht (aber wenn Sie etwas schrecklich Kluges haben, können Sie es gerne teilen). Danke für deine Weisheit!

Update / Antwort / Lösung:

Laut Benutzer 'undefined' besteht der Unterschied darin, dasson wird nicht vollständig vom oberen Rand des Fensters delegiertdocument Objekt währendlive tut / ist.

Wie Claudio erwähnt, gibt es Teile deron Dokumentation, die auf dynamisch erstellte Elemente verweistund das was du in die$("") Teil der Abfragemuss zur Laufzeit existieren.

Hier ist meine neue Lösung: Erfassen von Klickereignissenon Mein modaler Dialog, der bei der Erstellung des Ereignisses zur Laufzeit zwar keinen Inhalt hat, jedoch meinen Inhalt und mein Element mit einer speziellen Klasse finden kann, die später generiert wird.

$("#dialog").on("click", ".classThatExistsInFormToDisplay", function() {
    ... //(success! Event captured)
});

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage