2011-08-09 15 views
1

ページが変更されないように、データを非表示のにPOSTするフォームがあります。しかし、私はSaveボタンが2つ連続して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:最初のものはロードが完了する前に、第2 submit()が呼び出されているが

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

。最初のものが完了するのを待っている2番目の提出をする方法はありますか?

私はsetTimeout()を使用することができましたが、ネットワークの速度に依存しないクリーンなソリューションを希望します。

答えて

2

私は

top.secondSave(); 
のようなものを持っている機能

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

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

し、そのインラインフレームのonload上)((のsetTimeoutをルーピングを除く)は、最も基本的なソリューションは、このような何かを持っている代わりに保存することができ推測します

+0

ありがとうございました! – tskuzzy

+0

私はセマフォをスパイします! :D – Meredith

1

あなたはjqueryの$のアヤックス()

は、あなたが最初にAJAXを経由してフォームデータを送信、提出した後、あなたは、AJAXのプラグインに結びつけることができ、完全なコールバック関数のクリックイベントをインターセプトする必要がありますを使用することができますし、 2番目の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を指定することができます。 –

関連する問題