web-dev-qa-db-ja.com

jQueryは単一フィールドのルール検証を無効にします

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に戻すだけで十分です。方法がわからないだけです。

誰もがそれを経験しましたか?

50
shake

無視ルールを追加して、セレクターを定義するだけです。この例では、検証はclass="ignore"を持つすべての要素を無視します

$("#myform").validate({
   ignore: ".ignore"
})
82
Gabe

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;
}
37
Simon_Weaver

Gabeの答えに従って、無視値をデフォルトとして設定することもできるため、各フォームで値を設定する必要はありません。

_$.validator.setDefaults({ignore: ".ignore"});
_

また、無視フィールドはjQuery not()関数で使用されるjQueryセレクターなので、単純なクラスだけでなく、任意の有効なセレクターを使用できます。

設定可能な他のデフォルト値の詳細については、 http://docs.jquery.com/Plugins/Validation/validate#toptions も参照してください。

6
Norman H

$('.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

3
Maslow