Betrachten Sie dieses Szenario zur Validierung:
function validateForm (validCallback) {
$('#first-name').add($('#last-name')).add($('#address')).each(function () {
// validating fields and adding 'invalid' class to invalid fields.
});
// doing validation this way for almost 50 fields (loop over 50 fields)
if ($('#holder .invalid').length == 0) {
// submitting data here, only when all fields are validated.
}
}
Mein Problem ist nun, dass der if- Block ausgeführt wird, bevor die Schleifen beendet sind. Ich habe erwartet, dass der Body von validateForm
synchron ausgeführt wird, aber es scheint, dass die jQuery- each()
Funktion asynchron ausgeführt wird. Habe ich recht? Warum funktioniert das nicht?
jquery
asynchronous
Saeed Neamati
quelle
quelle
each
ist synchron, aber der Code im Inneren ist möglicherweise nicht ...each
selbst wird synchron verarbeitet. Starten Sie eine eigene asynchrone Operation innerhalb der Schleife?Antworten:
Ja, die jQuery-
each
Methode ist synchron. Fast ALLES JavaScript ist synchron. Die einzigen Ausnahmen sind AJAX, Timer (setTimeout
undsetInterval
) und HTML5 Web Worker.Ihr Problem liegt wahrscheinlich an einer anderen Stelle in Ihrem Code.
quelle
jQuery
ist eine reine Javascript-Bibliothek. Außerajax
,setTimeout
undsetInterval
es gibt nichts, was asynchron ausgeführt werden kannJavaScript
. Wirdeach
also definitiv synchron ausgeführt. Es gibt definitiv einige js Fehler in dereach
Blockcode. Sie sollten in der Konsole nach Fehlern suchen.Alternativ können Sie sich die jQuery- Warteschlange ansehen , um eine beliebige Funktion in der Warteschlange auszuführen. Dadurch wird sichergestellt, dass die Funktion in der Warteschlange nur ausgeführt wird, wenn die vorherige Codeausführung abgeschlossen ist.
quelle
Ein weiterer Grund für diese Frage wäre, dass .each die Iteration einfach stoppt, wenn die Funktion (.each ()) false zurückgibt, und eine zusätzliche Variable verwendet werden muss, um die Informationen "return false" zu übergeben.
quelle
Für mich funktioniert es asynchron. Wenn es synchron funktioniert, warum funktioniert es so:
quelle
return false
In der.each()
Funktion wird nur die Schleife unterbrochen, und der verbleibende Code außerhalb der Schleife wird weiterhin ausgeführt. Setzen Sie also ein Flag in der.each()
Schleife und überprüfen Sie es außerhalb der Schleife.quelle
Gleiches Problem. Also repariere ich so
quelle
So mach ich es
quelle
Ich hatte das gleiche Problem. Mein $ .each befand sich innerhalb der Erfolgsfunktion von Ajax Call. Ich habe meinen Ajax-Aufruf durch Hinzufügen synchronisiert
async: false
und es hat funktioniert.quelle
Die jQuery.each-Methode wird synchron wiederholt, Sie können jedoch nicht garantieren, dass die Elemente in einer bestimmten Reihenfolge durchlaufen werden.
quelle