Is jQuery “each()” function synchronous?

2019-01-16 11:42发布

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?

8条回答
贼婆χ
2楼-- · 2019-01-16 12:37

Yes, the jQuery each method is synchronous. Nearly ALL JavaScript is synchronous. The only exceptions are AJAX, timers (setTimeout and setInterval), and HTML5 Web Workers.
Your problem is probably somewhere else in your code.

查看更多
小情绪 Triste *
3楼-- · 2019-01-16 12:43

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.

查看更多
登录 后发表回答