我有一个奇怪的问题&我想得到一些专业的反馈。
我正在创建一个CRM应用程序,我有一个带有预览按钮的表单。当按下预览按钮时,我的函数FIRST通过Ajax& amp;将表单的所有字段保存到DB。然后提交表格进行预览。
表单字段存储在一个数组中(因为这些字段会更改)。我正在使用jQuery.each(myArray,function(index,value)。
循环数组问题是表单在循环执行之前提交。如果我在循环中放置一个警报,或者如果我在document.submit()中添加了set time,那么一切正常。
我想知道为什么在转到代码中的下一行之前循环没有完成。
这是我的代码。
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!
感谢任何帮助,因为我真的想知道为什么循环没有完成,然后才转到下一行。
答案 0 :(得分:2)
jQuery.ready函数在DOM加载并准备就绪后使循环执行。由于document.formName.submit()在ready调用之外,因此会立即执行。尝试在准备好的呼叫中移动它,如下所示:
var myArray = ['sub','msg','pic','field4','field5','field6','field7'];
jQuery(document).ready(function($){
$.each(myArray, function(index, value) {
SaveFields(value);
});
document.formName.submit();
});
答案 1 :(得分:1)
您的代码的方式是,您在页面加载时(或在计时器或警报之后)执行该功能,您似乎需要在提交事件上执行此操作。 这样的事情应该有效:
$("#formElementId").submit(function() {
$.each(myArray, function(index, value) {
SaveFields(value); // my function that saves to db via Ajax call
});
});
});
答案 2 :(得分:0)
jQuery .ready()函数是一个事件处理程序,只有在加载DOM时才会触发。因为在ready()块之外调用了submit()函数,所以一旦加载了处理程序,执行就会传递给它,而不是在它被触发时传递给它。
答案 3 :(得分:0)
您需要将保存数据方法作为表单的处理程序onSubmit:
<form id="myForm" ... onsubmit="return saveAndLoadPreview(this, window.event)">
...
function saveAndLoadPreview(sender, evt){
// ajax-post the data
return true;
}
答案 4 :(得分:0)
您应该做的是为表单提交功能设置一个事件处理程序
例如,
$(document).ready(function($){
$("#yourForm").submit(function (e) {
e.preventDefault();
$.each(myArray, function(index, value) {
SaveFields(value); // my function that saves to db via Ajax call
});
});
$("#yourForm").submit(); // or using your own $.ajax submit call
});