Ich habe ein Problem mit .on()
. Ich habe mehrere Formularelemente (Formulare mit class="remember"
), außerdem füge ich form.remember
mit AJAX ein weiteres hinzu . Ich möchte also, dass es das Submit-Ereignis wie folgt behandelt:
$('form.remember').on('submit',function(){...})
Mit AJAX hinzugefügte Form funktioniert jedoch nicht.
Wo ist das Problem? Ist es ein Fehler?
$(document).on('submit','form.remember',function(){...})
document
das nächstgelegene statische übergeordnete Element ersetzen .Antworten:
Sie müssen das Ereignis an die Dokumentebene delegieren
$('form.remember').on('submit'
funktioniert genauso wie,$('form.remember').submit(
aber wenn Sie$(document).on('submit','form.remember'
es verwenden, funktioniert es auch für das später hinzugefügte DOM.quelle
$(document).on
die Leistung viel geringer ist als$('form.remember').on('submit'
. Es muss jetzt auf alle Übermittlungsereignisse im Dokument warten. Es ist viel besser, den Umfang ein wenig einzuschränken, alson
document
wenn möglich zuzuhörenIch hatte ein Problem mit den gleichen Symptomen. In meinem Fall stellte sich heraus, dass meiner Submit-Funktion die Anweisung "return" fehlte.
Beispielsweise:
quelle
return false;
das Formular nicht gesendet wird. Zum Absenden des Formulars verwendenreturn true;
.Das Problem hierbei ist, dass das "Ein" auf alle Elemente angewendet wird, die zu diesem Zeitpunkt vorhanden sind. Wenn Sie ein Element dynamisch erstellen, müssen Sie das on erneut ausführen:
Da Formulare normalerweise Namen oder IDs haben, können Sie sie auch einfach an das neue Formular anhängen. Wenn ich viele dynamische Dinge erstelle, füge ich eine Setup- oder Bindefunktion hinzu:
Wenn Sie also etwas erstellen (in meinem Fall normalerweise Schaltflächen), rufe ich einfach bindItems auf, um alles auf der Seite zu aktualisieren.
Ich mag es nicht, 'Körper'- oder Dokumentelemente zu verwenden, weil sie bei Registerkarten und Modalitäten dazu neigen, herumzuhängen und Dinge zu tun, die Sie nicht erwarten. Ich versuche immer, so spezifisch wie möglich zu sein, es sei denn, es ist ein einfaches 1-Seiten-Projekt.
quelle