だから私はこれがうまくいかない理由をもう少し深く掘り下げるつもりです。なぜなら私はハハを知らずに夜眠ることができない種類の人だからです。2013年1月29日に公開されたjQuery validate 1.10とMicrosoft jQuery Unobtrusive Validation 2.0.20710.0を使用しています。
jQuery ValidateでsetDefaultsメソッドを検索することから始めて、縮小化されていないファイルの261行でそれを見つけました。この関数が実際に行うことは、json $.validator.defaults
Validateで定義されている他のデフォルトとともに、ignoreプロパティが ":hidden"に設定されて初期化されている既存のjson設定をマージすることだけです。したがって、この時点で無視をオーバーライドしました。次に、このデフォルトプロパティが参照されている場所を確認します。
コードをトレースして、どこ$.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オブジェクトを使用して、ignoreプロパティを取得しています。したがって、setDefaultsメソッドで無視を設定する場合は、$( "form")。validate()が呼び出される前に発生する必要があることを確認する必要があります。
Asp.net MVCと邪魔にならないプラグインを使用している場合は、validateがdocument.readyで呼び出されていることをJavaScriptで確認するとわかります。 スクリプト、jquery検証、そして邪魔にならない後に実行されるdocument.readyブロックで自分のsetDefaultsも呼び出しました。これらのスクリプトは、呼び出しがあるスクリプトの前にhtmlで定義したためです。したがって、私の呼び出しは、検証中に非表示要素をスキップするデフォルトの機能に影響を与えなかったことは明らかです。ここにはいくつかのオプションがあります。
オプション1 -Juan Melladoが指摘したように、スクリプトが読み込まれるとすぐに実行されるdocument.readyの外部で呼び出しを行うことができます。ブラウザーが並列スクリプトのロードを実行できるようになったため、このタイミングについてはわかりません。私が用心深くしすぎているなら、私を訂正してください。また、これを回避する方法はおそらくありますが、私のニーズのために、私はこの道をたどりませんでした。
オプション2a-私の目には$.validator.setDefaults({ ignore: '' });
、document.readyイベントの内部をで置き換えるのが安全$("form").data("validator").settings.ignore = "";
です。これにより、指定されたフォームの要素に対して各検証を実行するときにjQuery検証によって実際に使用される無視プロパティが変更されます。
オプション2b-コードをもう少し調べた後$("form").validate().settings.ignore = "";
、ignoreプロパティを設定する方法としても使用できます。その理由は、validate関数を見ると、$.data()
関数を介してフォーム要素のバリデーターオブジェクトがすでに格納されているかどうかを確認するためです。form要素とともに保存されたバリデーターオブジェクトが見つかった場合は、別のバリデーターを作成するのではなく、単にバリデーターオブジェクトを返します。