Ich habe ein Formular, das mehrere Eingänge, Selects und Textareas hat.Bindung bei Änderung und andere Aktionen auf mehrere Ajax geladene Elemente innerhalb div
Beim Laden findet jQuery jedes Element, setzt seinen Datenattr auf den Standardwert, bindet ein Ereignis on change an ihn und löst eine Änderung aus.
Problem ist, dass einige Auswahlen mit Ajax basierend auf anderen Eingabewerten neu geladen werden.
Gibt es eine einfache Möglichkeit, diesen Code zu ändern, um mit Ajax geladenen Elementen zu arbeiten? Er muss den initialen Datenattr-Wert setzen, aber nur einmal pro Element (nachdem er in dom erscheint), gleich mit dem Auslösen der Änderung.
Dies ist der ursprüngliche Code:
$main_form.find('input, select, textarea').each(function(){
$(this).attr('data-empty', 'true').off('change').on('change', function(){
if ($(this).hasClass('number')) validate_int($(this));
update_progress($(this));
}).trigger('change');
});
Ich weiß, es ist so etwas wie:
$main_form.on('change', 'input, select, textarea', function(){
});
Aber das würde die Daten attr bei jeder Änderung binden und es würde die Änderung auch unendlich auslösen . Auch ist die .off('change')
nicht wirklich, da gebraucht, ich bin nur gewohnt, es zu benutzen.
Ich möchte diesen Code nicht kopieren und der Ajax-Done-Funktion hinzufügen, da ich versuche, Code-Duplikate zu vermeiden, die das Warten und Anpassen erschweren würden, als es bereits ist. Oder ist das die einzige Option?
.
Wenn Sie irgendwelche Fragen haben, kommentieren Sie einfach und ich werde meine Antwort aktualisieren, um so präzise wie möglich zu sein.
Danke für Hilfe.
würde, die Routine eine Funktion zu machen, es einmal auf Pageload Aufruf, und es nach jeder erfolgreichen Antwort Arbeit nennen? – Scott
Ich habe es als eine Funktion mit einigen mehr Elemente drin, Problem ist, Sie können dies nicht mehrmals aufrufen, da es das 'data-empty' Attribut zurücksetzen und die Änderung an allen Elementen auslösen würde, nachdem ein einzelnes Element mit AJAX geladen wurde . Und ich versuche auch, Code-Duplikation zu verhindern, indem ich es nicht in Ajax 'Done'-Funktion anrufe. – MiChAeLoKGB