2011-08-09 47 views
1

我有一個表單將POST數據隱藏到以防止頁面發生更改。不過,我希望「保存」按鈕依次執行兩個連續的submit()當發佈到iframe時同步表單提交

<form name="updatedocform" id="updatedocform" method="post" action="http://foo.bar" enctype="multipart/form-data" target="hiddenframe"> 
    ... 
    <input type="submit" onclick="save(); return false;" value="Save" /> 
</form> 
<iframe name="hiddenframe" id="hiddenframe"></iframe> 

的JavaScript:

function save() { 
    document.updatedocform.submit(); 
    // change some form values here 
    // alert("paused"); // if this alert is here, everything works fine 
    document.updatedocform.submit(); 
} 

然而第一個完成加載之前第二submit()被調用。有沒有辦法讓第二次提交等待第一次完成?

我可以使用setTimeout()但我想要一個更清潔的解決方案,不依賴於網絡的速度。

回答

2

我想最基本的解決方案(除循環的setTimeout)可能是有這樣的事情,而不是保存()函數

var firstSaving = false; 
function save() { 
    document.updatedocform.submit(); 
    firstSaving = true; 
} 

function secondSave() { 
    if(firstSaving) 
    { 
     firstSaving = false; 
     document.updatedocform.submit(); 
    } 
} 

,然後在該iframe的onload有類似

top.secondSave(); 
+0

感謝這工作! – tskuzzy

+0

我間諜信號! :d – Meredith

1

你可以使用jQuery的$。阿賈克斯()

你將不得不截斷第一提交,發送通過AJAX表單數據,然後你可以扎入AJAX插件完成回調函數的單擊事件和使第二個iframe提交。

$("submit").click(function() { 
     $(this).closest("form").ajax({ 
      url: "test.html", 
      data: $("form").serialize(), 
      success: function(){ 
      //fire second submit event 
      } 
    }); 
}); 

希望這會有所幫助。

+0

我不能使用Ajax,因爲它不直接支持文件上傳(至少不是一種便攜的方式)。 – tskuzzy

+0

在這種情況下,可能需要檢出$ .ajaxForm()插件http://jquery.malsup.com/form/#file-upload。這使您可以指定iframe:true作爲選項來執行您正在嘗試執行的操作。 –