Javascript每个循环问题

时间:2011-07-28 16:05:45

标签: javascript forms loops submit each

我有一个奇怪的问题&我想得到一些专业的反馈。

我正在创建一个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!

感谢任何帮助,因为我真的想知道为什么循环没有完成,然后才转到下一行。

5 个答案:

答案 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

});