【发布时间】:2014-07-30 15:42:36
【问题描述】:
$(function() {
$("#submit").click(function() {
for (var i=1; i<=14; i++)
{
setID(i);
checkField(i);
}
if ($('#pass_fail').val() != "fail")
{
//do something
}
当我单击注册表单的提交按钮时会发生这种情况。
我想要的执行顺序:
setID(1);
checkField(1); //等待这个完成
setID(2);
checkField(2);
setId(3);
checkField(3);
....
if 语句
我得到的执行顺序:
for 循环从 i=1 到 i=14
if 语句
checkField(i)s 随机排列
问题:$('#pass_fail').val() 的默认值为'pass'。但是,通过循环 checkField(i) 可能会将其值更改为“失败”。但由于实际上 if 语句是在 checkField(i)s 之前执行的,所以 $('#pass_fail') 的值总是以 'pass' 结束,而 'do something' 总是执行。
如何等待 checkField(i) 完成执行,然后再进行循环的下一次迭代?提前谢谢!
【问题讨论】:
-
要将异步函数转换为同步函数,您可能需要重构 checkField 以回调下一个 checkField。
-
那么,
checkField()执行服务器请求?为什么不一起抓取所有字段并一次检查它们? -
对,checkField() 包含一个 Ajax 调用,它访问一个带有检查不同字段的函数的 php 文件。我不能对所有字段执行一次调用的原因是因为每次调用都会返回一个不同的错误消息,对应于那个字段。如果单个 checkField() 一次检查所有字段,则所有不同字段的错误将显示在同一字段下。
标签: javascript jquery for-loop asynchronous callback