3

それでは、標準的な状況について説明しましょう。複数の入力(約60〜70)を持つフォームがあります。各入力を検証する必要があります。有効でない場合はfalseを返します。multiclicking(multisubmitting)グラフィカルなフィードバックで複数のAJAXリクエストを防ぐために、フォームを保護する必要があります。

AJAX私の解決策は、リクエストが送信される前にカスタムドキュメントイベントを呼び出すことです。これはdiv、幅とheight 100%、で即座に作成され、 z-index 9998gifとメッセージの読み込みが含まれます。そして、AJAXリクエストが完了すると、別の要素を呼び出します。これにより、その要素が。から削除されDOMます。

私の質問は:それは有効な解決策ですか?つまり、古いコンピューターでは、フォームの入力と検証の多くが遅くなる可能性があります。つまり、シールドdivが本文に追加され、フォームが送信されないように保護するまでに時間がかかる場合があります。関数を聞いて、それが何かを返すかどうかを検出するだけでいいですか?値を返す前に毎回解決する必要があるという私の理解を延期する場合、これは60〜70行の新しいコードを意味し、厄介で望ましくありません。

以前にこの問題に直面し、100%の精度と優雅さで問題を解決した人はいますか?

4

2 に答える 2

4

"shielding div"複数の送信を防ぐために a に依存しないでください 。送信する前に、フォーム チェックの送信イベントにフックするだけです。

$('#myForm').submit(function() {
    if (!stillValidating())
       //submit form
    else
       //handle however you deem necessary.
});
于 2012-12-26T09:08:20.263 に答える
0

最初にフォーム送信時にデフォルトの動作を停止する必要があり、次にフォーム入力が有効かどうかを確認する必要があります。有効な場合は ajax 呼び出しに進みます。

    $('#form').submit(    function(e){     

        e.preventDefault();
        var $form = $(this);

      // check if the input is valid
        if(! $form.valid()) return false;

       $.ajax({
            type: 'POST',
            url: 'add.php',
            data: $('#form').serialize(),
            success: function(response) {
                $("#answers").html(response);
            }

        });
    });
于 2012-12-26T10:00:42.497 に答える