3

私はAjaxでZendフォームを検証していますが、これを思いつきました:

$('#some-dialog-i-have form').live('submit', function(e) {

    e.preventDefault();

    MyClass.Form.Validate($(this), function() {
        // I wish to submit the form from this callback function
        $(this).trigger('submit');

    });
});

MyClass.Form.Validate はフォームを受け取り、XHR リクエストを実行してフォームが有効であることを確認します。

私の問題は、有効な場合はフォームの送信を続行したいが、有効でない場合はすべてを停止したいということです。このハンドラー内から送信をトリガーすると、明らかに再帰的な問題が発生します。これについて最善の方法は何ですか?

Form: {
    Validate: function(form, onSuccess) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: '/ajax/form/validate',
            data: form.serialize() + '&f=' + form.data('id')

        }).done(function(errorMessages) {
            if(errorMessages.count > 0) {
                // Snip (display errors)
                return false;
            }
        // Callback
            onSuccess();
        });
    }
}
  • 私はstopPropagationについて調べましたが、これはライブハンドラーには影響しません
  • live() ハンドラーが非推奨であることは承知しており、今のところ変更を怠っています
  • 単純に Ajax を介してフォームを投稿することを考えましたが、この方法で投稿するかどうかはわかりません

おそらく単純な解決策ですが、今日の私の頭は適切な場所にありません。

ありがとう。

4

1 に答える 1

1

頭に浮かぶことの 1 つは、フォームが Ajax チェックの結果として有効かどうかを示す変数を持つことです。

フラグが false の場合は、Ajax 検証を実行します。Ajax 検証が有効として戻ってきたら、フラグを true に設定します。送信ハンドラーがトリガーされると、フラグが表示されてチェックがバイパスされ、フォームの送信に直接進みます。

誰かが JS を無効にしたり、ボットがサーバーに直接投稿しようとして検証ステップをスキップした場合に備えて、送信時にフォームをサーバーで検証する必要があることに注意してください。

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

于 2012-10-21T18:18:23.317 に答える