2013-06-07 21 views
6

このような質問のバリエーションは何度も現れましたが、この種の文脈でこの質問に答えるものは何も見つかりません。ファイルアップロード後のJqueryフォームの提出

私はサードパーティのファイルアップロードを使用しています。これはjQueryを使用しており、ファイルのアップロードが完了すると成功のコールバックを行います。

私が達成したいのは、アップロードボタンをクリックするとアップロード機能が起動され(ファイルが進行状況バーと共にアップロードされ始めます)、ファイルアップロードと一緒にテキストフィールドを持つフォームです。フォームを送信する前に成功コールバック。

私はjQueryの完全なばかだとすぐに認めなければなりません。それはまったく私を混乱させるので、これをどうやって達成するのかは非常に分かりません。

これまでの試みでは、ファイルのアップロード中にすぐに送信しようとしました。

「今すぐアップロード」ボタンをクリックすると、機能manualuploader.uploadStoredFiles();がインスタンス化されます。

次のようにファイルアップローダーをインスタンス化するjQueryのは、次のとおりです。

<form action="index.php" method="post" enctype="multipart/form-data" id="uploader"> 
<div id="manual-fine-uploader"></div> 
<div id="triggerUpload" class="btn btn-primary" style="margin-top: 10px;"> 
<input type="text" name="textbox" value="Test data"> 
<input name="test" type="button" value="Upload now"> 
</div> 
</form> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script src="fineuploader-3.6.3.js"></script> 
<script> 
$(document).ready(function() { 
var manualuploader = new qq.FineUploader({ 
     element: $('#manual-fine-uploader')[0], 
     request: { 
       endpoint: 'uploader.php' 
     }, 
     autoUpload: false, 
     text: { 
       uploadButton: '<i class="icon-plus icon-white"></i> Select Files' 
     } 
     }); 
     $('#triggerUpload').click(function() {  
     manualuploader.uploadStoredFiles(); 
     }); 
}); 

</script> 
+0

あなたのフォームには、明らかに関連性がありません。なぜこのフォームが必要ですか?現実的な状況を提供してください。 –

+0

これは単純化した例です。私は、アップロードが完了した後に提出される他の情報(アップロードが始まる前に)を記入したいと思っています。 – monkeymatrix

+0

これはhttp://stackoverflow.com/questions/16940096/fine-uploader-how-to-use-in-combination-with-other-input-fieldsの複製のようです。 –

答えて

6

私はあなたがjQueryのを使用している気づきました。なぜthe jQuery wrapper for Fine Uploaderを使用しないのですか?

私はonCompleteコールバックを聞いています。これは、アップロードが完了すると(sucessfulかどうか)解雇されます。 onCompleteが解雇されると、すべてのファイルが正常に提出されたことを確認するロジックを含むsubmitForm()になります。

論理は比較的単純です。進行中のファイルがなく、qq.statusFAILEDのファイルがない場合は、フォームを送信することができます。

また、onCancelコールバックを聞いて、アップロードが成功せずキャンセルされた場合にフォームが送信されることを確認します。

さらに多くのコールバックがあります。ファインアップローダーのドキュメントでcallbacksAPI methodsを読んでみることをお勧めします。さらに、私はFine Uploader jQuery docsを見るでしょう。

jQueryを理解することが問題ならば、thisを近くに保管することをおすすめします。

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script src="fineuploader-3.6.3.js"></script> 

<form action="index.php" method="post" id="uploader"> 
<input type="text" name="textbox" value="Test data"> 
    <div id="manual-fine-uploader"></div> 
    <div id="triggerUpload" class="btn btn-primary" style="margin-top: 10px;"> 
    </div> 
</form> 



$(document).ready(function() { 

    $("#triggerUpload").click(function() { 
     $("#manual-fine-uploader").fineUploader('uploadStoredFiles'); 
    }); 

    function submitForm() { 
     if ($(this).fineUploader('getInProgress') == 0) { 
      var failedUploads = $(this).fineUploader('getUploads', 
       { status: qq.status.UPLOAD_FAILED }); 
      if (failedUploads.length == 0) {  
       // do any other form processing here 
       $("#uploader").submit(); 
      } 
     } 
    }; 

    // Instantiate a Fine Uploader instance: 
    $("#manual-fine-uploader").fineUploader({ 
     autoUpload: false, 
     request: { 
      endpoint: "/uploads_bucket" 
     } 
    }).on("complete", function (event, id, name, response) { 
     submitForm.call(this); 
    }).on('statusChange', function (event, id, oldStatus, newStatus) { 
     if (newStatus === qq.status.CANCELED) { 
      submitForm.call(this); 
     } 
    }); 
}); 

ご不明な点がございましたら、お気軽にお問い合わせください。

+0

ありがとう、このようなファイルを複数アップロードすると、なぜブラウザ(Firefox)がbeforeunloadイベントをスローするのか(あなたのブラウザはこのページを離れようとしていますか? 1つのファイルで、フォームは警告なしに正常に送信されます。 – monkeymatrix

+0

申し訳ありませんが、私はばかげていました。ありがとう、私は複数のファイルのアップロードのためにこれをテストしました、そして、私がgetInProgressチェックを持っていればアップローダーは提出しないようです。ファイルが完了していても、submitFormが完了した後にのみsubmitFormが呼び出されても、getInProgressの値は0ではないと推測しています。 – monkeymatrix

+2

@monkeymatrix進行中のファイルがあれば、このbeforeunloadダイアログが表示されます。このダイアログが表示されている場合、一部のファイルはまだアップロードの進行中です。 –

関連する問題