考虑以下用于验证的场景:
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是异步执行的。我说的对吗?为什么这个不起作用?
发布于 2011-09-10 21:24:39
是的,jQuery each
方法是同步的。几乎所有的JavaScript都是同步的。唯一的例外是AJAX、计时器(setTimeout
和setInterval
)和HTML5 Web Workers。
您的问题可能出在代码中的其他地方。
发布于 2011-09-10 21:42:48
jQuery
纯粹是一个javascript库。在JavaScript
中,除了ajax
、setTimeout
和setInterval
之外,没有任何东西可以异步执行。所以each
绝对是同步执行的。在each
块代码中肯定有一些js错误。您应该在控制台中查看是否有任何错误。
或者,您可以查看jQuery queue来执行队列中的任何函数。这将确保只有在前一次代码执行完成时,才会执行排队函数。
发布于 2013-05-24 17:16:00
提出这个问题的另一个原因是,当( .each () )函数返回false时,.each将简单地停止迭代,并且必须使用另一个变量来传递"return false“信息。
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');
}
https://stackoverflow.com/questions/7371942
复制相似问题