рассмотрите этот сценарий для проверки:
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.
}
}
Теперь моя проблема в том, что блок if выполняется до завершения циклов. Я ожидал, что тело validateForm
будет выполняться синхронно, но кажется, что each()
функция jQuery выполняется асинхронно. Я прав? Почему это не работает?
jquery
asynchronous
Саид Нямати
источник
источник
each
синхронно, но код внутри может быть не ...each
сам обрабатывается синхронно. Вы начинаете какую-то собственную асинхронную операцию из цикла?Ответы:
Да,
each
метод jQuery синхронный. Почти ВСЕ JavaScript синхронны. Единственными исключениями являются AJAX, таймеры (setTimeout
иsetInterval
) и веб-воркеры HTML5.Вероятно, ваша проблема в другом месте вашего кода.
источник
jQuery
это чисто библиотека javascript. За исключением случаевajax
,setTimeout
иsetInterval
нет ничего , что может асинхронно выполняться вJavaScript
. Такeach
что точно выполняется синхронно. Внутриeach
кода блока определенно есть какая-то ошибка js . Вы должны проверить консоль на наличие ошибок.В качестве альтернативы вы можете взглянуть на очередь jQuery для выполнения любой функции в очереди. Это гарантирует, что функция в очереди будет выполнена только после завершения предыдущего выполнения кода.
источник
Еще одна причина задать этот вопрос заключается в том, что .each просто остановит итерацию, когда функция (.each ()) вернет false, и необходимо использовать дополнительную переменную для передачи информации «return false».
источник
Для меня это работает как асинхронно. Если работает синхронизация, почему так работает:
источник
return false
.each()
Функция in прерывает только цикл, а оставшийся код вне цикла по-прежнему выполняется. Итак, установите флаг в.each()
цикле и проверьте его вне цикла.источник
Та же проблема. Так что я исправляю вот так
источник
Вот как я это делаю
источник
Я была такая же проблема. мой $ .each находился внутри функции успеха вызова ajax. Я сделал свой вызов ajax синхронным, добавив,
async: false
и он сработал.источник
Метод jQuery.each зацикливается синхронно, но вы не можете гарантировать, что он будет перебирать элементы в каком-либо определенном порядке.
источник