0

jQuery 検証プラグインを使用してフォームを検証しています。また、addmethod関数を使用して独自の検証メソッドを作成しています。これは、jQuery Validator をセットアップする方法です。

$(document).ready(function() {
    if ($("#validation_json").length > 0) {
        var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
        $(".form-horizontal").validate({
            rules: validationJSON.rules,
            messages: validationJSON.messages
        });
    }
});

ID が validation_json のタグを入力し、値を jQuery バリデータ プラグインの一連のルールとメッセージに設定します。これらのルールとメッセージは、フォーム ビルダーの助けを借りてサーバー側で出力されます。唯一の問題は、次のように独自の検証方法を追加するたびに発生することです。

jQuery.validator.addMethod("uniqueemail", function(email) {
    return false; //just for testing
}, "This email is already in use");

addMethodjQueryバリデーターは、フィールドを送信する前にこのメソッドを使用して、フィールドが有効かどうかを確認します(上記のルールセットに加えて)。に渡されるメッセージではありませんaddMethod。addMethod 関数に実際に渡されたメッセージを表示する方法を知っている人はいますか? ありがとう!

アップデート:

これは、問題を示すjsFiddleリンクです。

4

1 に答える 1

1

これをどのように設定したかに問題があります...

$(document).ready(function() {
    if ($("#validation_json").length > 0) {
        var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
        $(".form-horizontal").validate({
            rules: validationJSON.rules,
            messages: validationJSON.messages
        });
    }
});

.validate()DOM対応でプラグインを初期化するために使用されます。条件付きステートメント内に配置したため、プラグインは、条件が満たされた場合にのみフォームで初期化されます。ifそれ以外の場合、検証は初期化に失敗します。.valid()プラグインを再初期化する代わりに、検証テストをトリガーするために使用します...

$(document).ready(function() {

    $(".form-horizontal").validate({
        rules: validationJSON.rules,
        messages: validationJSON.messages,
        // any other options
    });

    if ($("#validation_json").length > 0) {
        var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
        $(".form-horizontal").valid();  // trigger a validation test
    }

    jQuery.validator.addMethod("uniqueemail", function(email) {
        return false; //just for testing
    }, "This email is already in use");

});

基本デモ: http: //jsfiddle.net/AYvmg/

デモは、からのカスタムメッセージaddMethodが期待どおりに機能していることを示しています。

その後、メソッド.validate()を使用して、別の呼び出しなしでカスタムメッセージを動的に変更することができます。.rules('add')

$('#yourfield').rules('add', {
    messages: {
        uniqueemail: "this is a new message"
    }
});

別の基本的なデモ:http: //jsfiddle.net/5RnLM/

この2番目のデモは、最初のデモと同じように機能します。次に、#testボタンをクリックすると、ルールのメッセージが別のメッセージに変更されます。この.rules('add')メソッドを使用して、必要なときにいつでも他の関数からカスタムメッセージを変更できます。

それ以外の場合は、関連するHTMLを表示し、jsFiddleデモを作成して、発生している問題をより明確に示すことができます。

于 2013-02-03T00:47:54.493 に答える