jQuery: asegurarse de que todos los grupos de radio estén marcados

Me gustaría recorrer varios grupos de botones de opción (dinámicos) usando jQuery, y si no se ha realizado una selección, arroja un error y detiene el envío del formulario.

Aquí está mi esfuerzo hasta ahora:

$("form").submit(function() {
    $(":radio").each(function(){
        if($(this).val().length == 0) {
            alert('Not selected all radios');
            return false;
        }
    }); 
});

Pero siempre ignora la declaración if que detendrá el envío, como si tal vez $ (esto) no fuera realmente el valor de los botones de opción.

Aquí hay un jsFiddle: http://jsfiddle.net/aVVW9/

Cualquier ayuda sería muy apreciada, ¡gracias!

preguntado el 22 de mayo de 12 a las 18:05

3 Respuestas

Prueba esto. El enfoque es recorrer TODOS los botones de radio y LUEGO extraer el nombre del grupo de botones de radio, usando :checked para ver si algún miembro de ese grupo está marcado. Un booleano simple detiene los errores después de que se encuentra el primer cheque faltante.

$("form").submit(function() {
    var submitme = true;
    $(':radio').each(function() { // loop through each radio button
        nam = $(this).attr('name'); // get the name of its set
        if (submitme && !$(':radio[name="'+nam+'"]:checked').length) { 
        // see if any button in the set is checked
            alert(nam+' group not checked');
            submitme = false;
        }
    });
    return submitme; // cancel the form submit
});        ​

http://jsfiddle.net/mblase75/aVVW9/5/

contestado el 22 de mayo de 12 a las 19:05

Muchas gracias, esto es excelente y solo muestra la alerta cuando no se verifica nada, pero ¿hay alguna manera de simplificar el código de alguna manera eliminando el nombre y también el retorno falso? bajo la alerta en realidad no detiene el envío del formulario :( - Nick

Por supuesto, puede cambiar el mensaje de alerta a cualquier cosa que desee. También es posible que desee agregar un error clase a las etiquetas del grupo de radio, o algo así, para resaltar los botones que deben verificarse: jsfiddle.net/mblase75/aVVW9/6 - traficante de llamas

¿Cómo editar si quiero que el usuario vea todos los errores en una alerta? con la segunda edición, una vez que el error es correcto, ¿dónde editar para cambiar el bgcolor nuevamente a blanco? - Interfaith

$("form").submit(function() {
    $(":radio", this).each(function(){
        if(!this.checked) {
            alert('Not selected all radios');
            return false;
        }
    }); 
});

or

$("form").submit(function() {
    if($(':radio:not(:checked)', this).length) {
       alert('Not selected all radios');
       return false;
    }
});

Mira esto manifestación. Aquí, por simplicidad, envuelvo cada grupo de radio dentro de un div que tiene clase radio_group y hacer un bucle sobre ellos.

contestado el 22 de mayo de 12 a las 18:05

Gracias, pero esto siempre devuelve falso, me pregunto si es porque hay botones de radio dentro de los grupos que no están marcados. - Nick

Gracias, pero lo mismo (por cierto, ¡agregué el ! y probé el segundo código también :() - Nick

Siempre me dice "No seleccioné todas las radios", incluso si he elegido ambas: Nick

Muchas gracias, pero el mismo problema, creo que estoy haciendo algo mal :( - Nick

@Nich, ¿por qué la demostración del problema funciona bien? ¿Cuál es su problema? - laparadoja del código

¡Accidentalmente acabo de encontrar una solución aún más elegante! Solo es útil cuando conoce la cantidad exacta de botones de opción.

var x = 0;

$(":radio").change(function() {
x = x + 1;

if (x == count) {

//do smth

}

});

Respondido 10 ago 13, 10:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.