jQuery検証プラグインを使用したラジオボタングループの検証


128

jQuery検証プラグインを使用してラジオボタングループ(1つのラジオボタンを選択する必要があります)の検証を実行するにはどうすればよいですか?


forum.jquery.com/topic/…のc.reevesからの回答を参照してください

非常に強力で使いやすい新しいjQueryバリデーターがあります。あなたはそれをチェックアウトすることができます:code.google.com/p/bvalidator
Nenad

このような単純なもののためにライブラリ全体を含めたくない
Doug Molineux

回答:


113

jqueryの新しいリリース(1.3以上と思います)では、必要なのは無線セットのメンバーの1つを必須に設定するだけで、残りはjqueryが処理します。

<input type="radio" name="myoptions" value="blue" class="required"> Blue<br />
<input type="radio" name="myoptions" value="red"> Red<br />
<input type="radio" name="myoptions" value="green"> Green

上記では、続行する前に、「私のオプション」の名前付きの3つのラジオオプションのうち少なくとも1つを選択する必要があります。

ところで、Mahesによるラベルの提案は素晴らしく機能します。


これは、jQueryの更新に関して私にとって最良の答えです。+1。
キーラン・アンドリュース

6
これに関する唯一の問題は、それらのいずれもチェックされていない場合です。jQueryの検証では、最初のラジオボタンが赤で強調表示されますが、実際には、それらすべてを強調表示したいと思うでしょう。また、ラジオボタンをチェックすると、赤が消えます。
2011

2
@Haacked検証オプションでerrorPlacementコールバック関数を使用して、エラーメッセージを意味のある場所に配置できますか?
autonomatt 2011

2
@Haacked:オプションに追加focusInvalid: falseするvalidate()と、最初のラジオボタンが強調表示されなくなります。
Jim Miller、

2
私はいつもこのようにして、エラーラベルをerrorPlacement関数に配置しています。これは私がラジオボタンに対して行うことです:if(element.is( "input:radio")){error.insertAfter(element.parent()); } else {error.insertAfter(element); }
Francisco Goldenstein 2014年

24

次のルールを使用して、ラジオボタングループの選択を検証します。

myRadioGroupName : {required :true}

myRadioGroupNameは、name属性に指定した値です


15
ラベルの位置を制御する場合は、必要なテキストを使用して、必要な場所に独自のエラーラベルを提供できます。<label for = "myRadioGroupName" class = "error" style = "display:none; ">いずれか1つを選択してください。</ label>
トム

@Tom labelエラーのタグを自分で書くのは無意味です。実際、プラグインはこのエラーラベルタグを自動的に追加します。
ahmehri 2015年

3
かなり昔のことですが、プラグインによって自動的に作成された場所ではなく、DOMの他の場所に<label>を配置しようとしていたのだと思います。また、プラグインの動作が...最後の5年間で変更された十分に可能だ
トム・

カスタムエラーのために、ここでは「タイプ」ではなく「名前」が必要なのは悲しいことです。
justdan23

19

これを使用することもできます:

<fieldset>
<input type="radio" name="myoptions[]" value="blue"> Blue<br />
<input type="radio" name="myoptions[]" value="red"> Red<br />
<input type="radio" name="myoptions[]" value="green"> Green<br />
<label for="myoptions[]" class="error" style="display:none;">Please choose one.</label>
</fieldset>

このルールを追加するだけです

rules: {
 'myoptions[]':{ required:true }
}

ルールの追加方法について言及します。


1
しかし、これはHTML5検証でエラーを引き起こします。なぜなら、for属性はID参照である必要があるためです(3つのラジオボタンを同じIDに設定することはできません)。
armyofda12mnkeys 2012

1
name属性とid属性には大きな違いがあります。
ノーマンH

2
ラジオボタンは1つの値しか返さないことに注意してくださいname="myoptions[]"。複数の値が返される可能性があることを示唆しているため、これは少し混乱します。
認知症の

エラーメッセージを上に配置します。<style> .radio-group {position:relative; margin-top:40px; }#myoptions-error {position:absolute; 上:-25px; } </ style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required">青<br /> <input type = "radio" name = "myoptions" value = "red">赤<br /> <input type = "radio" name = "myoptions" value = "green">緑</ div> </ div> <!-ラジオを終了-グループ->
Sonobor

4

ブランドンの答えに従って。ただし、控えめな検証を使用するASP.NET MVCを使用している場合は、最初の属性にdata-val属性を追加できます。使いやすさのために、各ラジオボタンにラベルを付けることも好きです。

<span class="field-validation-valid" data-valmsg-for="color" data-valmsg-replace="true"></span>
<p><input type="radio" name="color" id="red" value="R" data-val="true" data-val-required="Please choose one of these options:"/> <label for="red">Red</label></p>
<p><input type="radio" name="color" id="green" value="G"/> <label for="green">Green</label></p>
<p><input type="radio" name="color" id="blue" value="B"/> <label for="blue">Blue</label></p>

3

検証する別の方法は次のとおりです。

var $radio = $('input:radio[name="nameRadioButton"]');
$radio.addClass("validate[required]");

私の例があなたを助けることを願っています


2

同じ問題がありました。バリデーター用にカスタムのハイライトおよびハイライト解除関数を書くだけで巻き上げます。これを検証オプションに追加すると、エラークラスが要素とそのそれぞれのラベルに追加されます。

        'highlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").addClass(errorClass);
                    $(this).addClass(errorClass);
                });
            } else {
                $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
                $(element).addClass(errorClass);
            }
        },
        'unhighlight': function (element, errorClass, validClass) {
            if($(element).attr('type') == 'radio'){
                $(element.form).find("input[type=radio]").each(function(which){
                    $(element.form).find("label[for=" + this.id + "]").removeClass(errorClass);
                    $(this).removeClass(errorClass);
                });
            }else {
                $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
                $(element).removeClass(errorClass);
            }
        },

2

ラジオボタンのコード-

<div>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Female",false) Female</span>
<span class="radio inline" style="margin-right: 10px;">@Html.RadioButton("Gender", "Male",false) Male</span>                                                        
<div class='GenderValidation' style="color:#ee8929;"></div>    
</div> 

<input class="btn btn-primary" type="submit" value="Create" id="create"/>

とjQueryコード-

<script>
    $(document).ready(function () {
        $('#create').click(function(){

            var gender=$('#Gender').val();
            if ($("#Gender:checked").length == 0){
                $('.GenderValidation').text("Gender is required.");
                return false;
            }
        });
    });
</script>

0

エラーメッセージを上に配置します。

   <style> 

 .radio-group{ 
      position:relative; margin-top:40px; 
 } 

 #myoptions-error{ 
     position:absolute; 
     top: -25px; 
  } 

 </style> 

 <div class="radio-group"> 
 <input type="radio" name="myoptions" value="blue" class="required"> Blue<br /> 
 <input type="radio" name="myoptions" value="red"> Red<br /> 
 <input type="radio" name="myoptions" value="green"> Green </div>
 </div><!-- end radio-group -->
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.