Foros del Web » Programando para Internet » Javascript »

Validación 42 radiobuttons obligatorios en formulario

Estas en el tema de Validación 42 radiobuttons obligatorios en formulario en el foro de Javascript en Foros del Web. Hola a todos, Llevo peleándome con esto varios días y aunque creo que he encontrado un código que me serviría, no me hace la validación ...
  #1 (permalink)  
Antiguo 26/10/2015, 06:30
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 17 años, 1 mes
Puntos: 2
Pregunta Validación 42 radiobuttons obligatorios en formulario

Hola a todos,
Llevo peleándome con esto varios días y aunque creo que he encontrado un código que me serviría, no me hace la validación bien.
Tengo un formulario con 42 radiobuttons, y como entenderéis, no puedo ponerme a validar uno por uno por su nombre o id, entonces, encontré un código que valida por "type".

Código Javascript:
Ver original
  1. function validargrupos(formulario) {
  2.     var grupos = [];
  3.     for (i = 0; elem = formulario.elements[i]; i++) {
  4.         if (elem.type == "radio") {
  5.             if (!grupos[elem.name]) {
  6.                 grupos[elem.name] = elem.checked;
  7.             }
  8.         }
  9.     }
  10.     for (grupo in grupos) {
  11.         if (!grupos[grupo]) {
  12.             alert("Falta uno por rellenar");
  13.             break;
  14.         }
  15.     }
  16.     return true;
  17. }

Código HTML:
<form id="formulario" name="formulario" method="post" action="" onsubmit="return validargrupos()">
<input type="radio" id="demo-priority-low" name="demo-priority"><label for="demo-priority-low">Low</label>
<input type="radio" id="demo-priority-med" name="demo-priority"><label for="demo-priority-med">Med</label>
<input type="radio" id="demo-priority-high" name="demo-priority"><label for="demo-priority-high">High</label>
// etc... así 41 más....
</form> 
No sé que hago mal, pero no me da mensajes cuando los dejo sin seleccionar. ¿Alguna idea? Sé que me queda muy poco para que funcione pero no lo veo.

Gracias!
JC
  #2 (permalink)  
Antiguo 26/10/2015, 06:45
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Validación 42 radiobuttons obligatorios en formulario

Otra opción que manejaba es esta:

Código Javascript:
Ver original
  1. function verif(){
  2. var pepez=0;
  3. for(i=0; ele=document.formulario.elements[i]; i++){
  4. if (ele.type=='radio')
  5. if (ele.checked){pepez=1;break;}}
  6. if (pepez==1){document.formulario.submit();}else{
  7. alert('Debe seleccionar alguno de los Items');return;}
  8. }

Código HTML:
Ver original
  1. <form name="formulario" method="post" action="">
  2. <input type="radio" id="demo-priority-low" name="demo-priority"><label for="demo-priority-low">Low</label>
  3. <input type="radio" id="demo-priority-med" name="demo-priority"><label for="demo-priority-med">Med</label>
  4. <input type="radio" id="demo-priority-high" name="demo-priority"><label for="demo-priority-high">High</label>
  5. // etc... así 41 más....
  6. <input type="submit" name="Enviar" value="Enviar" class="special" onclick="verif()" />
  7. </form>

Me da la advertencia, pero envía el formulario a pesar de todo... le he quitado el "return" y hace lo mismo y ya me pierdo.

Gracias!
  #3 (permalink)  
Antiguo 26/10/2015, 10:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Validación 42 radiobuttons obligatorios en formulario

Si no retornas false o no utilizas el método .preventDefault(), el envío no se cancelará.

Podrías hacer algo similar a esto:
Código Javascript:
Ver original
  1. document.addEventListener("DOMContentLoaded", function(){
  2.     document.querySelector("[name=formulario]").addEventListener("submit", function(event){
  3.         event.preventDefault();
  4.  
  5.         var enviar = true,
  6.             options = this.querySelectorAll("[type=radio]"),
  7.             total = options.length
  8.             i = 0;
  9.  
  10.         for (i = 0; i < total; i++){
  11.             if (!options[i].checked){
  12.                 enviar = false;
  13.                 break;
  14.             }
  15.         }
  16.  
  17.         if (enviar){
  18.             this.submit();
  19.         }
  20.         else{
  21.             alert("Debe de seleccionar todas las opciones");
  22.         }
  23.     }, false);
  24. }, false);

Esto es simple. Luego de cargar todos los elementos del documento, registro el evento submit al formulario. Dicho evento es que el se produce cuando envías sus datos para ser procesados. Una vez ocurrido esto, ejecuto una función que recibe como argumento al objeto del evento que está ocurriendo. Mediante el método .preventDefault(), cancelo dicho envío. Declaro algunas variables, entre las que está una variable auxiliar para determinar si se realizará el envío de los datos del formulario luego de la validación y que tendrá el valor true por defecto. También tomo a los elementos de tipo "radio" del formulario (this hace referencia al formulario dentro de la función que se está ejecutando), el total de estos y una variable contadora para el bucle que usaré para realizar la validación de todos los elementos.

En el bucle, verifico que cada radiobutton esté marcado. En caso de no estarlo, asigno el valor false a la variable auxiliar y termino la ejecución del bucle. Finalmente, verifico si el valor de la variable auxiliar es true (evaluándola de esa manera, sin compararla con otro valor, se verifica si es true o false) y solo si se cumple dicha condición, realizo el envío de los datos del formulario utilizando el método .submit(); caso contrario, se muestra un mensaje de alerta en el que se le informa al usuario que debe de seleccionar todas las opciones.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: formulario, funcion, input, radiobuttons
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:18.