$(function() {
$("#submit").click(function() {
for (var i=1; i<=14; i++)
{
setID(i);
checkField(i);
}
if ($('#pass_fail').val() != "fail")
{
//do something
}
这就是当我点击注册表的submit按钮时发生的事情。
我想要的执行顺序:
setID(1);
checkField(1);//等待完成
setID(2);
checkField(2);
setId(3);
checkField(3);
……
if语句
我得到的执行顺序:
从i=1到i=14的for循环
if语句
随机顺序的checkField(I)
Problem:$('#pass_fail').val()的默认值为'pass‘。但是,通过循环,checkField(i)可能会将其值更改为“fail”。但由于实际上if语句是在checkField(i)s之前执行的,所以$('#pass_fail')的值总是以'pass‘结束,而'do’总是执行。
在进入looP的下一次迭代之前,我如何等待checkField(i)完成执行?提前谢谢你!
发布于 2014-06-10 09:48:39
从您对问题的描述中,我假设checkField()
正在进行某种异步Ajax调用。如果你真的想序列化对checkField()
的调用,这样直到第一个调用完成才会进行第二个调用,那么你需要改变代码的结构和流程来实现这一点。两种常见的方法是使用回调来指示触发下一次对checkField()
的调用的checkField()
调用的完成,或者使用promises来完成类似的操作。
下面是回调机制的一个示例:
$("#submit").click(function() {
var i = 0;
function next() {
i++;
if (i <= 14) {
setID(i);
checkField(i, next);
} else {
// all checkField operations are done now
if ($('#pass_fail').val() != "fail") {
//do something
}
}
}
next();
});
然后,必须修改checkField()
,以便在它完成异步操作时调用传递给它的回调。
如果您正在使用jQuery在checkField中进行ajax操作,那么使用jQuery promises也可以相当容易地解决这一问题。
https://stackoverflow.com/questions/24131480
复制相似问题