【发布时间】:2011-07-28 16:05:44
【问题描述】:
我遇到了一个奇怪的问题,我想获得一些专业的反馈。
我正在创建一个 CRM 应用程序,其中有一个带有预览按钮的表单。当按下预览按钮时,我的函数首先通过 Ajax 将表单的所有字段保存到数据库中,然后提交表单以供预览。
表单字段存储在一个数组中(因为这些字段会更改)。我正在使用 jQuery.each(myArray, function(index, value) 循环数组。
问题是表单在循环执行之前提交。如果我在循环中添加警报,或者我在 document.submit() 中添加设置超时,一切正常。
我想知道,为什么在转到代码的下一行之前循环没有完成。
这是我的代码。
var myArray = ['sub','msg','pic','field4','field5','field6','field7'];
jQuery(document).ready(function($){
$.each(myArray, function(index, value) {
SaveFields(value); // my function that saves to db via Ajax call
});
});
//document.formName.submit(); // this submits the form before .each loop can execute
eval("setTimeout('document."+formName+".submit()', 700)"); // THIS WORKS AS INTENDED
我还尝试对数组项进行计数,并像这样在循环中添加了 submit()...
var ArrCount = myArray.length - 1;
jQuery(document).ready(function($){
$.each(myArray, function(index, value) {
var saveIt = SaveFields(value);
if (ArrCount == index){
document.formName.submit(); // this also submits the form before .each loop can execute
}
});
});
同样的结果!它只适用于 alert 或 setTimout!
感谢任何帮助,因为我真的很想知道为什么循环没有完成,然后再转到下一行。
【问题讨论】:
-
SaveFields 有什么作用?您似乎在 AJAX 请求返回之前提交了表单。
-
SaveFields 是一个简单的基于 jQuerry 的 ajax 函数,一次存储一个字段。
-
我想过这个!在 AJAX 请求返回之前提交表单,所以我将 SaveFields ajax 代码放入 .each 循环中,希望循环将遍历每个项目的代码!....但没有做出任何不同得到相同的结果! !!
-
谢谢!将 async: false 添加到 ajax 调用解决了问题!
标签: javascript forms loops submit each