Validación del grupo de botones de radio usando el complemento de validación jQuery


128

¿Cómo realizar la validación para un grupo de botones de radio (se debe seleccionar un botón de radio) usando el complemento de validación jQuery?


Mira la respuesta de c.reeves en forum.jquery.com/topic/…

Hay un nuevo validador jQuery que es muy potente y fácil de usar. Puede consultarlo: code.google.com/p/bvalidator
Nenad el

no quiero incluir una biblioteca completa para algo tan simple como esto
Doug Molineux

Respuestas:


113

Con las versiones más recientes de jquery (creo que 1.3+), todo lo que tiene que hacer es configurar uno de los miembros del equipo de radio para que sea requerido y jquery se encargará del resto:

<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

Lo anterior requeriría seleccionar al menos 1 de las 3 opciones de radio con el nombre de "mis opciones" antes de continuar.

¡La sugerencia de etiqueta de Mahes, por cierto, funciona maravillosamente!


Esta es ahora la mejor respuesta para mí con las actualizaciones de jQuery. +1.
Kieran Andrews

66
El único problema con esto es cuando ninguno de ellos está marcado, jQuery validate resalta el primer botón de opción en rojo, pero en realidad probablemente desee resaltar TODOS. Además, una vez que marque cualquier botón de radio, el rojo debería desaparecer.
Hackeado el

2
@ Hackeado ¿Podría usar la función de devolución de llamada errorPlacement en las opciones de validación para colocar el mensaje de error en algún lugar significativo?
autonomatt

2
@ Hackeado: agregar focusInvalid: falsea las validate()opciones evitará que se resalte el primer botón de opción.
Jim Miller

2
Siempre lo hago de esta manera y ubico la etiqueta de error en la función errorPlacement. Esto es lo que hago para los botones de opción: if (element.is ("input: radio")) {error.insertAfter (element.parent ()); } else {error.insertAfter (elemento); }
Francisco Goldenstein

24

use la siguiente regla para validar la selección del grupo de botones de radio

myRadioGroupName : {required :true}

myRadioGroupName es el valor que le ha dado al nombre de atributo


15
Tenga en cuenta que si desea controlar la posición de la etiqueta, puede proporcionar su propia etiqueta de error donde lo desee con el texto que desee: <label for = "myRadioGroupName" class = "error" style = "display: none; "> Elija uno. </label>
Tom

@Tom es inútil escribir usted mismo la labeletiqueta del error, en realidad el complemento agrega automáticamente esta etiqueta de etiqueta de error.
ahmehri

3
Hace bastante tiempo, pero imagino que lo que estaba tratando de hacer era colocar el <label> en otra parte del DOM, en lugar de donde fue creado automáticamente por el complemento. Además, es muy posible que el comportamiento del complemento haya cambiado en los últimos 5 años ...
Tom

Triste cómo se requiere el "nombre" en lugar del "tipo" aquí para errores personalizados.
justdan23

19

También puedes usar esto:

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

y simplemente agregue esta regla

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

Mencione cómo agregar reglas.


1
Pero creo que esto generaría errores en la validación HTML5, ya que el atributo for debe ser una referencia de ID (que no podemos establecer 3 botones de opción en la misma ID).
armyofda12mnkeys

1
Hay una GRAN diferencia entre el atributo de nombre y el atributo de id.
Norman H

2
Por favor, no es que un botón de radio deba devolver solo un valor, por lo tanto, name="myoptions[]"es un poco confuso ya que sugiere que se pueden devolver múltiples valores.
Demencial

Pone el mensaje de error en la parte superior. <style> .radio-group {posición: relativa; margen superior: 40px; } # myoptions-error {position: absolute; arriba: -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- grupo ->
Sonobor

4

Según la respuesta de Brandon. Pero si está usando ASP.NET MVC que usa una validación discreta, puede agregar el atributo data-val al primero. También me gusta tener etiquetas para cada botón de radio para usabilidad.

<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

Otra forma de validar es así.

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

Espero que mi ejemplo te ayude


2

Yo tuve el mismo problema. Terminé escribiendo una función de resaltado y resaltado personalizado para el validador. Agregar esto a las opciones de validación debería agregar la clase de error al elemento y su etiqueta respectiva:

        '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

código para el botón de 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"/>

y código 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

Pone el mensaje de error en la parte superior.

   <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 -->
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.