Validation du groupe de boutons radio à l'aide du plugin de validation jQuery

128

Comment effectuer la validation d'un groupe de boutons radio (un bouton radio doit être sélectionné) à l'aide du plugin de validation jQuery?

user27052
la source
Regardez la réponse de c.reeves dans forum.jquery.com/topic/…
Il existe un nouveau validateur jQuery qui est très puissant et facile à utiliser. Vous pouvez le vérifier: code.google.com/p/bvalidator
Nenad
Je ne veux pas inclure une bibliothèque entière pour quelque chose d'aussi simple que ça
Doug Molineux

Réponses:

113

Avec les nouvelles versions de jquery (1.3+ je pense), tout ce que vous avez à faire est de définir l'un des membres de la radio comme requis et jquery s'occupera du reste:

<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

Ce qui précède nécessiterait au moins 1 des 3 options radio avec le nom de «mes options» à sélectionner avant de continuer.

La suggestion d'étiquette de Mahes, d'ailleurs, fonctionne à merveille!

Brandon Rome
la source
C'est maintenant la meilleure réponse pour moi avec les mises à jour de jQuery. +1.
Kieran Andrews
6
Le seul problème avec cela est que lorsqu'aucun d'entre eux n'est coché, jQuery validate met en surbrillance le premier bouton radio en rouge, mais en réalité, vous voulez probablement les mettre en évidence TOUS. De plus, une fois que vous avez coché un bouton radio, le rouge devrait disparaître.
Haacked le
2
@Haacked Vous pouvez utiliser la fonction de rappel errorPlacement dans les options de validation pour placer le message d'erreur dans un endroit significatif?
autonomatt
2
@Haacked: l'ajout focusInvalid: falseaux validate()options empêchera la mise en évidence du premier bouton radio.
Jim Miller
2
Je le fais toujours de cette façon et positionne l'étiquette d'erreur dans la fonction errorPlacement. Voici ce que je fais pour les boutons radio: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (élément); }
Francisco Goldenstein
24

utilisez la règle suivante pour valider la sélection de groupe de boutons radio

myRadioGroupName : {required :true}

myRadioGroupName est la valeur que vous avez donnée à l'attribut name

Mahes
la source
15
Notez que si vous souhaitez contrôler la position de l'étiquette, vous pouvez fournir votre propre étiquette d'erreur là où vous le souhaitez avec le texte que vous souhaitez: <label for = "myRadioGroupName" class = "error" style = "display: none; "> Veuillez en choisir un. </label>
Tom
@Tom il est inutile d'écrire soi-même la labelbalise de l'erreur, en fait le plugin ajoute automatiquement cette balise d'étiquette d'erreur.
ahmehri
3
Il y a assez longtemps, mais j'imagine que ce que j'essayais de faire était de placer le <label> ailleurs dans le DOM, plutôt que là où il a été créé automatiquement par le plugin. De plus, il est fort possible que le comportement du plugin ait changé au cours des 5 dernières années ...
Tom
Triste comment il nécessite le "nom" au lieu du "type" ici pour les erreurs personnalisées.
justdan23 le
19

Vous pouvez également utiliser ceci:

<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>

et ajoutez simplement cette règle

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

Mentionnez comment ajouter des règles.

Haider Abbas
la source
1
Mais cela entraînerait des erreurs sur la validation HTML5, je pense que l'attribut for doit être une référence d'identification (que nous ne pouvons pas définir 3 boutons radio sur le même ID).
armyofda12mnkeys
1
Il y a une GRANDE différence entre l'attribut name et l'attribut id.
Norman H
2
Veuillez noter qu'un bouton radio ne doit renvoyer qu'une seule valeur, par conséquent, il name="myoptions[]"est un peu déroutant car il suggère que plusieurs valeurs peuvent être renvoyées.
Dementic
Place le message d'erreur en haut. <style> .radio-group {position: relative; marge supérieure: 40px; } # myoptions-error {position: absolue; haut: -25px; } </style> <div class = "radio-group"> <input type = "radio" name = "myoptions" value = "blue" class = "required"> Bleu <br /> <input type = "radio" name = "myoptions" value = "red"> Rouge <br /> <input type = "radio" name = "myoptions" value = "green"> Vert </div> </div> <! - end radio- groupe ->
Sonobor
4

Selon la réponse de Brandon. Mais si vous utilisez ASP.NET MVC qui utilise une validation discrète, vous pouvez ajouter l'attribut data-val au premier. J'aime aussi avoir des étiquettes pour chaque bouton radio pour la convivialité.

<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>
Matt Frear
la source
3

Une autre façon de valider est comme ça.

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

J'espère que mon exemple vous aidera

strudeltercero
la source
2

J'ai eu le même problème. Bloqué juste en écrivant une fonction de surbrillance personnalisée et de désactivation pour le validateur. L'ajout de ceci aux options de validation devrait ajouter la classe d'erreur à l'élément et son étiquette respective:

        '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);
            }
        },
Cin
la source
2

code pour bouton radio -

<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"/>

et jQuery code-

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

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

Place le message d'erreur en haut.

   <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 -->
Sonobor
la source