2

さて、これは本当に単純なシナリオであり、MVCを始めたばかりなので理解できません。クライアント側とサーバー側の両方を使用するカスタムパスワードバリデーターを作成しました。その間、クライアント側のバリデーターは長さをチェックするだけです(動作するようになると、これ以上のことを行います)。サーバー側の検証は正常に機能します。これはクライアント側の実装です

$.validator.unobtrusive.adapters.add("password",
    function (options) {
        options.rules['password'] = {};
        options.messages['password'] = options.message;
    }
);
$.validator.addMethod("password", function (value, element, params) {
    if (value.length < 8 || value.length > 15) {
        return false;
    }
    return true;
}); 

フォームが送信されたときにのみこのバリデーターを起動させたいです。

現在、入力を開始するとすぐに、パスワードが長さの要件を満たすまでパスワードが無効であることが通知されます。フォームが送信された後にのみ入力を検証する他のフォームフィールドにある標準の「必須」バリデーターのように機能させたいです。

4

1 に答える 1

1

そのため、ここでキーアップ機能を無効にすることに関するいくつかの回答を含む同様の質問を見つけました。ASP.netMVC 3 jQuery Validation; 邪魔にならないOnKeyUpを無効にしますか?しかし、私はそれを行う別の方法を見つけました。それは、JavaScriptの余分な行を書いたり、すべてのフィールドで機能をオフにしたりすることを含みません。基本的に、jquery.validation.jsファイル内の実際の関数を変更して、呼び出された属性を確認し、nokeyup見つかった場合は戻ります。onkeyup関数は、ファイルの先頭からそれほど遠くない場所にあります。もともとこんな感じ

onkeyup: function(a, b) {
    if ( b.which === 9 && this.elementValue(a) === '' ) {
        return;
    }
    else if ( a.name in this.submitted || a=== this.lastActive ) {
        this.element(a);
    }
},

だから私はそれをに変更しました

onkeyup: function (a, b) {
    if (b.which === 9 && this.elementValue(a) === "") { 
        return;
    }
    else if (a.getAttribute('nokeyup')) { // Added this statement
        return;
    } 
    else if ( a.name in this.submitted || a=== this.lastActive ) {
        this.element(a);
    }
},

その後、私がしなければならなかったのは、フォームの送信と出来上がりまで検証を実行したくないテキストボックスに「nokeyup」属性を追加することだけでした。

于 2012-10-25T02:40:01.017 に答える