編集開始
最初のケースでは、jQuery オブジェクトで jQuery submit イベントをトリガーしています ( http://api.jquery.com/submit/を参照) 。
2 番目のケースでは、javascript オブジェクトで javascript submit メソッドを呼び出しています。submit イベントをトリガーしません。
どちらの場合も同じ「送信」ではありません。
2番目のケースで、次を置き換えると:
$('form')[0].submit();
と
$($('form')[0]).submit();
また、無限ループになってしまいます。
編集を終了
実際、plupload では、フォームを正常に送信できるようになるまで待つことがポイントです。主な機能は、StateChanged イベントへのサブスクライブです。
このように動作します:
1-最初にキューが空かどうかを確認します。そうであれば、フォームの送信を検証する (true を返す)
2- キューが空でない場合
a- 残りのファイルのスタートアップロード b- キューをチェックする将来の「StateChanged」イベントをサブスクライブします。その時点で空の場合は、正常に合格するステップ 1 に移動します (キューはその時点で空になるため) c - フォームの送信をキャンセルします (キューは現在空ではありません)
コメント付きのコード:
// Client side form validation
$('form').submit(function(e) {
var myForm = e.currentTarget;
var uploader = $(item).pluploadQueue();
// if files in queue upload them first. Cancel current form submission.
// Subscribe to 'StateChanged' to check if the queue is empty and try
// a new submission, each time a file is finished uploading
if (uploader.files.length > 0) {
// When all files are uploaded submit form
uploader.bind('StateChanged', function() {
if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
myForm.submit(); //
}
});
// start uploading remaining files.
// End of each upload will trigger the 'StateChanged'
uploader.start();
// there are files in queue. (the reason we are running current block)
// Cancel current form submission
return false;
}
return true; // the queue is empty, validate current form submission
});
これが役立つことを願っています