2

jquery.validate( 1.8.1 ) ライブラリと ASP MVC3 RTMライブラリを使用してjquery.validate.ubobtrusive、検証後、実際のフォームが送信される前に追加のロジックを挿入できるフックがあるかどうか疑問に思っています。

言い換えると、フォームが送信され、検証が実行され (通常どおりに実行されます)、検証によってフォームの送信を停止する理由が見つからず、Run My Code Hereが実行され、通常どおり送信されます。

submitフォームのイベントを処理して、次のようなことができることはわかっています。

$('#MyForm').submit(function() {
    if (!$(this).valid())
       return false;

    // My Code Here
}

...自分で検証を呼び出し、成功した場合は自分のロジックを入れます。しかし、これは汚いと感じます。これが jquery.validate の送信ハンドラーで実行されている唯一のコードであることをどのように知ることができますか? これが実行中の唯一のコードであっても、本当にそれを複製したいですか? 送信時に検証ライブラリが行うことをミラーリングする必要はありません。検証が行われた後、フォームが送信される前に自分自身を注入したいだけです-神話上の$('#MyForm').lastPossibleMomentBeforeSubmit(function() { // My Code Here }); 出来事にバインドするように。

この「My Code Here」がどこにあるべきかについての指針はありますか?

4

2 に答える 2

1

jquery.validate を使用しているだけの場合は、次のように成功のコールバックを使用できます。

$(function () {
    $('#MyForm').validate({
       success : function(error) {
           // additional logic
       }
    });
});

ただし、残念ながら jquery.validate.ubobtrusive を使用しているため、jquery.validate.ubobtrusive は .validate への呼び出しを内部的に隠しているため、これを直接行うことはできません。

代わりに、jquery.validate.ubobtrusive が .validate に渡した設定/オプション オブジェクトを取得し、既存の成功ハンドラーをキャプチャして、オリジナルを呼び出し、次のような独自の追加機能を実行する独自のものに置き換える必要があります。

$(function () {
            var settings = $('form').data('validator').settings,
                originalSuccess = settings.success;
            settings.success = function (error) {
                originalSuccess(error);
                // additional logic
            };
        });
于 2013-02-22T15:26:23.123 に答える
-1

このようなことができると信じています。

$(document).ready(function() {
    $("#MyFormform").validator().bind("onSuccess", function(e, els) {
         //Code to run after validation succeeds
    }
});
于 2011-06-13T04:19:35.607 に答える