MVCを使用して、実行時に生成されるフォームを作成しています。検証のために、私は非常に使いやすいjQuery検証ライブラリを試しています。タグのcdata属性に各フィールドの検証式があります
<input type="text" name="xyz" id="xyz" class="defaultTextBox"
cdata="{validate:{required:true, decimal:true, messages:
{required:'Please enter an decimal value',
decimal:'Please enter a valid decimal'}}}">
これは美しく機能します。ここでもう1つの要件は、ページのロジックに従って一部のフィールドが表示および非表示になっていることです。フォームの送信を妨げないように、非表示フィールドの検証を無効にする必要があります。 required:trueをfalseに切り替えてからtrueに戻すだけで十分です。方法がわからないだけです。
誰もがそれを経験しましたか?
無視ルールを追加して、セレクターを定義するだけです。この例では、検証はclass="ignore"
を持つすべての要素を無視します
$("#myform").validate({
ignore: ".ignore"
})
ASP.NET MVC Unobtrusive JQuery検証を使用している場合、この方法で設定を行う必要があります。これは、Microsoftが実際にjQuery validateを呼び出す方法が原因です。これは、ready
メソッド内で安全に実行できるはずです。
編集:これをコピーして貼り付ける前に、以下のCoryのコメントを参照してください。これは私の元のコードです
$("form").data("validator").settings.ignore = ".data-val-ignore, :hidden, :disabled";
次に、.data-val-ignore
クラスを検証しないものに適用します。
おそらく:hidden
で定義されているデフォルトの無視動作であるjquery.validate.js
を追加することに注意してください。 :disabled
も追加したいです。
$.extend($.validator, {
defaults: {
messages: {},
groups: {},
rules: {},
errorClass: "error",
validClass: "valid",
errorElement: "label",
focusInvalid: true,
errorContainer: $([]),
errorLabelContainer: $([]),
onsubmit: true,
ignore: ":hidden", // default for ignore in jquery.validate.js
ignoreTitle: false,
onfocusin: function( element, event ) {
this.lastActive = element;
最後に、スタイルを設定したい場合があります-特にデバッグ中に便利です。
.data-val-ignore
{
background: #eee;
}
Gabeの答えに従って、無視値をデフォルトとして設定することもできるため、各フォームで値を設定する必要はありません。
_$.validator.setDefaults({ignore: ".ignore"});
_
また、無視フィールドはjQuery not()
関数で使用されるjQueryセレクターなので、単純なクラスだけでなく、任意の有効なセレクターを使用できます。
設定可能な他のデフォルト値の詳細については、 http://docs.jquery.com/Plugins/Validation/validate#toptions も参照してください。
$('.multiselect').rules('remove');
で楽しい時間を過ごしました
私の場合、何らかの理由で_.cancel
_または_.data-val-ignore
_を_$.validator.setDefaults
_と$('.multiselect')
の両方に追加しても修正されませんでした。
私も試しました
_$('select[multiple][data-val]').removeAttr('data-val').removeAttr('data-val-number').addClass('data-val-ignore').validate({ ignore: "[multiple]" });
$.validator.setDefaults({ ignore: ":hidden,:disabled,.data-val-ignore" });
$('.multiselect').closest('form').data('validator').settings.ignore = ":hidden,:disabled,.data-val-ignore, .data-val-ignore *";
$('.multiselect').data('validator').settings.ignore = "[multiselect]"
_
それらのそれぞれ...とそれらの組み合わせ
私の_jquery.validate.js
_は
_/*! jQuery Validation Plugin - v1.11.0 - 2/4/2013
* https://github.com/jzaefferer/jquery-validation
* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */
_
jqueryは
jQuery JavaScript Library v1.9.1-日付:2013-2-4