consider this scenario for validating:
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.
}
}
Now, my problem is that, the if block get executed before loops are finished. I expected the body of validateForm
to be executed synchronously, but it seems that jQuery each()
function gets executed asynchronously. Am I right? Why this doesn't work?
Yes, the jQuery
each
method is synchronous. Nearly ALL JavaScript is synchronous. The only exceptions are AJAX, timers (setTimeout
andsetInterval
), and HTML5 Web Workers.Your problem is probably somewhere else in your code.
I had the same issue. my $.each was inside the success function of ajax call. i made my ajax call synchronous by adding
async: false
and it worked.