web-dev-qa-db-ja.com

jQuery Validate-非表示フィールドの検証を有効にします

JQuery検証プラグイン1.9の新しいバージョンでは、デフォルトで 非表示フィールドの検証は無視されます です。 textarea入力フィールドにCKEditorを使用していますが、フィールドを非表示にしてiframeに置き換えます。フィールドはありますが、非表示フィールドの検証は無効です。検証プラグインバージョン1.8.1では、すべてが期待どおりに機能します。

したがって、私の質問は、v1.9検証プラグインで非表示フィールドの検証を有効にする方法です。

この設定は機能しません:

$.validator.setDefaults({ ignore: '' });
172
Shaman

プラグインの作成者は、「引用符なしの角括弧」[]を使用する必要があると述べています

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

リリース:Validation Plugin 1.9.0: "...別の変更により、非表示の要素を含むフォームの設定が簡単になり、デフォルトでは無視されます(オプション「ignore」には「:hidden」がデフォルトとして設定されています。理論的には、これにより既存の設定が壊れる可能性があります。実際にそうでない場合は、ignore-optionを「[]」に設定して修正できます引用符なしの括弧)。」

すべてのフォームのこの設定を変更するには:

$.validator.setDefaults({ 
    ignore: [],
    // any other default options and/or rules
});

.setDefaults()document.ready関数内にある必要はありません)

または、1つの特定のフォームの場合:

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});

編集

一部の非表示フィールドで検証を有効にし、他のフィールドを無視する方法については、 この回答 を参照してください。


EDIT 2

「これは機能しません」というコメントを残す前に、OPは単に jQuery Validateプラグイン について質問しているだけで、彼の質問にはnothingASP.NET、MVC、またはその他のMicrosoftフレームワークが、このプラグインの通常の予想される動作を変更する方法を処理します。 Microsoftフレームワークを使用している場合、jQuery Validateプラグインのデフォルトの機能は、Microsoftのunobtrusive-validationプラグインによって上書きされます。

unobtrusive-validationプラグインに苦労している場合は、代わりにこの回答を参照してください: https://stackoverflow.com/a/11053251/594235

303
Sparky

ASP.NET MVC3サイト内では、誰にも役立つ場合に備えて、控えめな検証などをセットアップするためにフレームワークを残していたので、これはうまくいきました。

$("form").data("validator").settings.ignore = "";
68
James Morcom

置くことを確認してください

 $.validator.setDefaults({ ignore: '' });

NOT inside $(document).ready

63
jerick

だから、これがうまくいかない理由についてもう少し詳しく見ていきます。なぜなら、私は、母を知らずに夜眠ることができないような人だからです。私はjQuery validate 1.10と2013年1月29日に公開されたMicrosoft jQuery Unobtrusive Validation 2.0.20710.0を使用しています。

JQuery ValidateでsetDefaultsメソッドを検索することから始め、縮小されていないファイルの261行目でそれを見つけました。この関数が実際に行うことは、jsonの設定を既存の$.validator.defaultsにマージすることです。これは、jQuery Validateで定義されている他のデフォルトとともに、 ":hidden"に設定されたignoreプロパティで初期化されます。そのため、この時点で無視をオーバーライドしました。次に、このdefaultsプロパティが参照されている場所を見てみましょう。

$.validator.defaultsが参照されている場所を確認するためにコードをトレースしたとき。これは、フォームバリデータのコンストラクタでのみ使用されていることに気付きました。jQueryの170行目は未縮小ファイルを検証します。

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};

この時点で、バリデーターは設定されたデフォルト設定をマージし、フォームバリデーターに添付します。検証、ハイライト、ハイライト解除などを行っているコードを見ると、すべてvalidator.settingsオブジェクトを使用してigno​​reプロパティを取得します。したがって、setDefaultsメソッドで無視を設定する場合は、$( "form")。validate()が呼び出される前に無視する必要があることを確認する必要があります。

Asp.net MVCと控えめなプラグインを使用している場合は、document.readyでvalidateが呼び出されるjavascriptを見るとわかりますドキュメント内でsetDefaultsも呼び出していますスクリプトの後に実行される.readyブロック。jqueryは、呼び出しを含むスクリプトの前にHTMLでこれらのスクリプトを定義しているため、検証と控えめです。したがって、検証中に非表示の要素をスキップするデフォルトの機能には、明らかに私の呼び出しは影響しませんでした。ここにはいくつかのオプションがあります。

オプション1-Juan Melladoが指摘したように、スクリプトが読み込まれるとすぐに実行されるdocument.readyの外部で呼び出しを行うことができます。ブラウザは現在、並列スクリプトロードを実行できるため、このタイミングについてはわかりません。気をつけているだけなら、修正してください。また、おそらくこれを回避する方法はありますが、私のニーズのためにこの道をたどりませんでした。

オプション2a-私の目には、document.readyイベント内の$.validator.setDefaults({ ignore: '' });$("form").data("validator").settings.ignore = "";に置き換えるだけです。これにより、指定されたフォームの要素に対して各検証を行うときに、jQuery validateによって実際に使用されるignoreプロパティが変更されます。

オプション2b-コードをもう少し調べた後、無視プロパティを設定する方法として$("form").validate().settings.ignore = "";を使用することもできます。その理由は、検証関数を調べるときに、$.data()関数を介してフォーム要素の検証オブジェクトが既に保存されているかどうかを確認するためです。 form要素で保存されたバリデータオブジェクトを見つけると、別のオブジェクトを作成するのではなく、バリデータオブジェクトを返します。

26
JustinMichaels

これは、ASP.NETサイト内で機能しました。一部の非表示フィールドで検証を有効にするには、このコードを使用します

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

フォームのすべての要素の検証を有効にするには、これを使用します$("form").data("validator").settings.ignore = "";

$(document).ready(function() { })内で使用することに注意してください

9

特定のフォームの特定のページにignore: []を追加しただけで、このソリューションはうまくいきました。

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });
8
Kiran

これは私のために働いています。

jQuery("#form_name").validate().settings.ignore = "";
0
Waqas Bukhary