JQuery est “chacun()” fonction synchrone?
envisager ce scénario pour la validation:
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.
}
}
Maintenant, mon problème est que, la si bloc exécuté avant les boucles sont finis. J'ai attendu le corps de validateForm
être exécuté de façon synchrone, mais il semble que jQuery each()
fonction est exécutée de manière asynchrone. Suis-je le droit? Pourquoi cela ne fonctionne pas?
- Quel est le code de validation ressembler?
each
est synchrone, mais le code à l'intérieur peut-être pas... each
elle-même est traitée de manière synchrone. Êtes-vous du démarrage de certains asynchrone en fonctionnement de votre propre à partir de l'intérieur de la boucle?- même problème ici .. comment avez-vous le résoudre ?
- C'est il y a longtemps, je ne me souviens pas. Mais je sais que les réponses m'ont aidé. Donc, je pourrais avoir utilisé async blocs de code dans mon code de validation (comme essayer de valider l'adresse à l'aide d'une requête ajax).
- hmm ..je l'ai résolu de cette façon.. je faisais "return false" à l'intérieur de chaque fonction qui n'a pas de travail, je suppose.. maintenant je suis le maintien d'un drapeau à l'intérieur de chaque fonction et de retour que le drapeau à la fin de la validation ..
- Le problème, c'est peut-être que vous les variables déclarées à l'intérieur de la fonction() qui n'étaient pas visibles dans l'instruction if?
Vous devez vous connecter pour publier un commentaire.
Oui, le jQuery
each
méthode est synchrone. Presque TOUS les JavaScript est synchrone. Les seules exceptions sont l'AJAX, des chronomètres (setTimeout
etsetInterval
), et Web HTML5 Travailleurs.Votre problème est probablement quelque part dans votre code.
jQuery
est purement une bibliothèque javascript. Saufajax
,setTimeout
etsetInterval
il n'y a rien qui peut exécuté en mode asynchrone dansJavaScript
. Donceach
est certainement exécuté de manière synchrone. Il y a certainement des js erreur à l'intérieur de laeach
bloc de code. Vous devriez jeter un oeil dans la console d'erreurs éventuelles.Alternativement, vous pouvez prendre un coup d'oeil à jQuery la file d'attente pour exécuter une fonction dans la file d'attente. Ce sera assurez-vous que la file d'attente de la fonction sera exécutée que lorsque la précédente exécution de code est complet.
Une autre raison de poser cette question serait que .chacun sera tout simplement arrêter l'itération lors de la (.chacun() ) la fonction retourne false, et une variable supplémentaire doit être utilisé pour transmettre le "return false" de l'information.
return false
dans.each()
fonction des sauts de la boucle uniquement, et le reste du code en dehors de la boucle s'exécute encore. Afin de définir un indicateur dans.each()
boucle et vérifier de l'extérieur de la boucle.Même problème. J'ai donc corrigé comme ce
Pour moi, il fonctionne comme un système. Si cela fonctionne synchronisation, pourquoi ça fonctionne comme ça:
C'est comment je le fais
J'ai eu le même problème. mon $.chacun était à l'intérieur de la réussite de la fonction de l'appel ajax. j'ai fait mon appel ajax synchrone par l'ajout de
async: false
et cela a fonctionné.Le jQuery.chaque méthode boucles de façon Synchrone, mais vous ne pouvez pas garantir que ça va faire une boucle par les éléments dans un ordre particulier.