1

フォームを送信するときに、id を使用してフォームを送信し、JQuery で送信しようとしましたが、もちろん、最初のスクリプトで無限ループに陥ります。

plupload を使用した後、無限ループを引き起こさない別の方法でフォームを送信していることに気付きました。

これに関する情報を見つけようとしましたが、これに関する特定の情報を取得できないようですか?

$('#test').submit(function(e) {
   alert("here");
   $('#test').submit();
   return false;
});

$('form').submit(function(e) {
   alert("here");
   $('form')[0].submit();
   return false;
});
4

1 に答える 1

0

編集開始

最初のケースでは、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
    });

これが役立つことを願っています

于 2012-06-28T15:50:54.680 に答える