2011-11-22 47 views
5

¿Cuál es la mejor manera de validar para asegurar al menos uno de cada grupo se comprueba, por lo que en los siguientes grupos de ejemplo son name1, name2, name3?botón de validación grupo de radio dinámicos en jQuery

Ejemplo

<input type="radio" name="name1"> 
<input type="radio" name="name1"> 
<input type="radio" name="name1"> 

<input type="radio" name="name2"> 
<input type="radio" name="name2"> 
<input type="radio" name="name2"> 

<input type="radio" name="name3"> 
<input type="radio" name="name3"> 
<input type="radio" name="name3"> 

Sé que puedo envolver un div alrededor de cada uno y luego comprobar cada botón de opción en el div, pero estoy en busca de una solución más dinámica. Por lo tanto, si en el futuro se agregan más botones de opción, el código jQuery no debería modificarse o no se deberían agregar los divs. Espero que esto tenga sentido.

+0

por que no añades una clase o un atributo id para cada grupo ? y puede validar usando – Kishore

Respuesta

8

Debe utilizar jquery.validate.js biblioteca para ayudar a resolver esta cuestión, echa un vistazo a su demo

Si utiliza la biblioteca sería tan simple como,

<input type="radio" name="name1" validate="required:true"> 
<input type="radio" name="name1"> 
<input type="radio" name="name1"> 

<input type="radio" name="name2" validate="required:true"> 
<input type="radio" name="name2"> 
<input type="radio" name="name2"> 

Mira la jFiddle: Esto encuentra todos los diferentes nombres para botones de radio y luego se ejecuta a través de todos esos diferentes grupos y se asegura de que haya al menos uno marcado, si no lanzará una alerta.

$('#button').click(function() { 
    var names = []; 

    $('input[type="radio"]').each(function() { 
     // Creates an array with the names of all the different checkbox group. 
     names[$(this).attr('name')] = true; 
    }); 

    // Goes through all the names and make sure there's at least one checked. 
    for (name in names) { 
     var radio_buttons = $("input[name='" + name + "']"); 
     if (radio_buttons.filter(':checked').length == 0) { 
      alert('none checked in ' + name); 
     } 
     else { 
      // If you need to use the result you can do so without 
      // another (costly) jQuery selector call: 
      var val = radio_buttons.val(); 
     } 
    } 
}); 
+0

Gracias esa es una solución muy útil - No quería usar un complemento solo para validar los botones de radio –

+0

Agregué un código más para una verificación más cruda. –

+1

qué nombres [$ (this) .attr ('name')] = true; ¿hacer? – contactmatt

1
$('[name="name1"]:checked').length != 0 

O

$('[name="name1"]').is(':checked') 

También podría hacer algo un poco más dinámico si te gusta:

var i = 1; 
while ($('[name="name'+i+'"]').length != 0) { 
    if ($('[name="name'+i+'"]').is(':checked')) { 
     // at least one is checked in this group 
    } else { 
     // none are checked 
    } 
    i++; 
} 
+1

Si los nombres de la radio fueran de ese formato, esto sería una solución bastante dulce, pero creo que como desarrollador, él querría darles un nombre más significativo. –

Cuestiones relacionadas