considere este escenario para validar:
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.
}
}
Ahora, mi problema es que el bloque if se ejecuta antes de que finalicen los bucles. Esperaba que el cuerpo de validateForm
se ejecutara sincrónicamente, pero parece que la each()
función jQuery se ejecuta de forma asincrónica. Estoy en lo cierto? ¿Por qué esto no funciona?
jquery
asynchronous
Saeed Neamati
fuente
fuente
each
es síncrono, pero el código dentro podría no ser ...each
se procesa sincrónicamente. ¿Está comenzando alguna operación asíncrona propia desde dentro del bucle?Respuestas:
Sí, el
each
método jQuery es sincrónico. Casi TODO JavaScript es sincrónico. Las únicas excepciones son AJAX, temporizadores (setTimeout
ysetInterval
) y HTML5 Web Workers.Su problema probablemente esté en otro lugar de su código.
fuente
jQuery
es puramente una biblioteca javascript. Exceptoajax
,setTimeout
ysetInterval
no hay nada que pueda ejecutarse asincrónicamenteJavaScript
. Entonceseach
definitivamente se ejecuta sincrónicamente. Definitivamente hay algún error js dentro deleach
código de bloque. Debes echar un vistazo en la consola por cualquier error.Alternativamente, puede echar un vistazo a la cola jQuery para ejecutar cualquier función en la cola. Esto asegurará que la función en cola se ejecutará solo cuando se complete la ejecución del código anterior.
fuente
Otra razón para hacer esa pregunta sería que .each simplemente detendrá la iteración cuando la función (.each ()) devuelva false, y se debe usar una variable adicional para pasar la información "return false".
fuente
Para mí funciona como asíncrono. Si funciona la sincronización, por qué funciona así:
fuente
return false
La.each()
función in solo rompe el ciclo, y el código restante fuera del ciclo aún se ejecuta. Por lo tanto, establezca una bandera en.each()
bucle y verifíquela fuera del bucle.fuente
El mismo problema. Así que lo arreglo así
fuente
Así es como lo hago
fuente
Tuve el mismo problema. my $ .each estaba dentro de la función de éxito de la llamada ajax. Hice mi llamada ajax sincrónica agregando
async: false
y funcionó.fuente
El método jQuery.each se repite sincrónicamente, pero no puede garantizar que recorra los elementos en un orden específico.
fuente