0

サーバー上のphpページを呼び出してデータベースを使用して入力を検証するjqueryプラグインを使用して作成されたカスタムバリデーターがあります。私はこれを行う方法を知りませんでしたが、私はjavascript / ajaxプログラマーではないので、これが私が思いつくことができる最高のものです

jQuery.validator.addMethod('checkVehicleRegistration', function(val, element) {

        var x = $.ajax({
        type: "POST",
        async: false,
        url: "ajax/validation/checkVehicleRegistration.php",
        data: "vehicle_reg=" + val,
        success: function(resp) {

        },
        error: function(e) {alert('checkVehicleRegistration failed' + e);}
    }); 

    if (x.responseText == '0') {return true;} else {return false;}

}, 'Registration already exists');

確かに、これは世界で最も優れたコードではありません。なぜなら、ajax 呼び出しを同期化する必要があり、すべてのオブジェクトを無効にする必要があるからです。ただし、私は JavaScript プログラマーではないので、まったく機能するのは奇跡です。

私の問題は、検証が非常に遅いことです。jquery は、この検証関数を複数回呼び出しているようです。アラートを使用して、検証関数がいつ呼び出されたかを調べてみましたが、対応するテキストボックスに入力しているとき、テキストボックスからタブアウトしたとき、およびフォームを送信したときに、検証が複数回呼び出されるようです。

このカスタム検証関数を設定して、ユーザーが送信を押したときにのみ呼び出され、テキストボックスに入力/タブ移動しているときは呼び出されないようにするにはどうすればよいですか? また、ajaxを使用してこのサーバー側の検証をより適切に行う方法についての「デザインパターン」に関する提案も大歓迎です

どうもありがとう

ありがとう

4

1 に答える 1

0

独自のメソッドを作成する必要はありません。リモート メソッドは必要なすべてを行います。たとえば、これは電子メール アドレスを検証し、既に存在するかどうかを確認するメソッドであり、さらにポスト経由でユーザー名を渡します。

$( "#myform" ).validate({
    rules: {
        email: {
            required: true,
            email: true,
            remote: {
                url: "check-email.php",
                type: "post",
                data: {
                    username: function() {
                        return $( "#username" ).val();
                    }
                }
            }
        }
    },
    messages:{
        email:{
            remote:"Type your message here"
        }
    }
});

また、いくつかのイベントを非アクティブ化して、より高速にすることもできます。たとえば、これはフォームを送信するときにのみ検証をチェックします。

$( "#myform" ).validate({
    onfocusout: false,
    onkeyup: false,
    onclick: false,
    rules: {
    }
});
于 2013-06-20T16:42:42.160 に答える