首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery "each()“函数是同步的吗?

jQuery "each()“函数是同步的吗?
EN

Stack Overflow用户
提问于 2011-09-10 21:18:22
回答 9查看 81K关注 0票数 139

考虑以下用于验证的场景:

代码语言:javascript
复制
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的主体是同步执行的,但看起来jQuery each() function是异步执行的。我说的对吗?为什么这个不起作用?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-09-10 21:24:39

是的,jQuery each方法是同步的。几乎所有的JavaScript都是同步的。唯一的例外是AJAX、计时器(setTimeoutsetInterval)和HTML5 Web Workers。

您的问题可能出在代码中的其他地方。

票数 169
EN

Stack Overflow用户

发布于 2011-09-10 21:42:48

jQuery纯粹是一个javascript库。在JavaScript中,除了ajaxsetTimeoutsetInterval之外,没有任何东西可以异步执行。所以each绝对是同步执行的。在each块代码中肯定有一些js错误。您应该在控制台中查看是否有任何错误。

或者,您可以查看jQuery queue来执行队列中的任何函数。这将确保只有在前一次代码执行完成时,才会执行排队函数。

票数 9
EN

Stack Overflow用户

发布于 2013-05-24 17:16:00

提出这个问题的另一个原因是,当( .each () )函数返回false时,.each将简单地停止迭代,并且必须使用另一个变量来传递"return false“信息。

代码语言:javascript
复制
var all_ok=true;
$(selector).each(function(){
    if(!validate($(this))){
        all_ok=false; //this tells the outside world something went wrong
        return false; //this breaks the .each iterations, returning early
    }
});
if(!all_ok){
    alert('something went wrong');
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7371942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档