Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Hacer que una validación continúe si todo va bien

Estas en el tema de Hacer que una validación continúe si todo va bien en el foro de Javascript en Foros del Web. Buen día! Supongamos que tenemos un formulario con dos campos, sexo y años . La idea es que, después de validar sexo se validen los ...
  #1 (permalink)  
Antiguo 18/04/2014, 15:53
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Hacer que una validación continúe si todo va bien

Buen día!


Supongamos que tenemos un formulario con dos campos, sexo y años.

La idea es que, después de validar sexo se validen los años.

Para validar lo 1ro empleo un for, y si se valida bien, pongo un return true. Pero hacer esto ya no sigue con la validación de lo 2do.

He aquí el código.

Ahora, si en vez de poner return true pongo un continue, sí se sigue con la validación de lo 2do, pero el for se repite innecesariamente.


¿Cómo le hacemos para que el for se pare ahí donde valide OK y, además, el script siga con la validación de los años?

Se me ocurre anidar todas las validaciones, algo así. Pero el código aumenta mucho y la verdad quisiera saber si se puede según la estructura del script tal como está ahora.



Saludos cordiales!

Última edición por berkeleyPunk; 18/04/2014 a las 16:19
  #2 (permalink)  
Antiguo 18/04/2014, 17:00
 
Fecha de Ingreso: octubre-2012
Ubicación: El mundo
Mensajes: 49
Antigüedad: 11 años, 6 meses
Puntos: 5
Respuesta: Hacer que una validación continúe si todo va bien

prueba poniendo break debería romper el for
Código Javascript:
Ver original
  1. function validarCuestionario()
  2.     {
  3.         var genero  = document.getElementsByName("genero");
  4.         var anios   = document.getElementById("anios");
  5.  
  6.  
  7.         /*  VALIDA GÉNERO  */
  8.  
  9.         for ( i=0; i<genero.length; i++ )
  10.         {
  11.             if ( genero[0].checked )
  12.             {
  13.                 alert("HOMBRE");
  14.                 break;
  15.             }
  16.             else if ( genero[1].checked )
  17.             {
  18.                 alert("MUJER");
  19.                 break;
  20.             }
  21.             else
  22.             {
  23.                 alert("Olvidaste seleccionar el GÉNERO");
  24.                 break;
  25.             }
  26.         }
  27.  
  28.  
  29.  
  30.         /*  VALIDA AÑOS */
  31.  
  32.         if ( anios.value == "" )
  33.         {
  34.             alert("¿Cuántos años tienes?");
  35.         }
  36.     }
nose si es lo que buscas.
un saludo
  #3 (permalink)  
Antiguo 18/04/2014, 17:05
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Hacer que una validación continúe si todo va bien

Yo te propongo hacerlo así:

Código Javascript:
Ver original
  1. var form = document.getElementsByTagName("form")[0],
  2.     elementos = form.elements,
  3.     total = elementos.length,
  4.     radios = [],
  5.     totalRadios = 0;
  6.  
  7. for (i = 0; i < total; i++)
  8.     if (elementos[i].getAttribute("type") == "radio"){
  9.         radios.push(elementos[i]);
  10.         totalRadios++;
  11.     }
  12.  
  13. form.addEventListener("submit", function(e){
  14.     e.preventDefault();
  15.    
  16.     var comodin = 0;
  17.    
  18.     for (i = 0; i < totalRadios; i++)
  19.         if (!radios[i].checked) comodin++;
  20.    
  21.     if (comodin == totalRadios)
  22.         alert("Debe de seleccionar una opción");
  23.     else
  24.         for (i = 0; i < total; i++)
  25.             switch (elementos[i].getAttribute("type")){
  26.                 case "text":
  27.                     if (!elementos[i].value.length)
  28.                         elementos[i].value = prompt("¿Cuántos años tienes?");
  29.                     break;
  30.                    
  31.                 case "radio":
  32.                         if (elementos[i].checked)
  33.                             alert(elementos[i].value);
  34.                     break;
  35.             }
  36. }, false);

Inicialmente, defino en variables al formulario, sus elementos, el total de elementos, un array en el que incluiré a todos los radio buttons del formulario (más adelante) y una variable en la que acumularé el total de radio buttons. Enseguida, busco entre los elementos del formulario a todos los elementos de tipo "radio" y por cada coincidencia, añado el elemento actual al array que declaré previamente y sumo 1 a totalRadios.

Luego, cuando mande el formulario a procesarse (evento submit), cancelo dicho evento con el método preventDefault, declaro una variable comodín y busco entre los elementos del array radios, es decir, entre los radio buttons del formulario, a aquellos que no estén marcados. Por cada uno que no lo esté, aumento en uno el valor de comodin.

Seguidamente, comparo al valor final de comodin con el total de radio buttons en el formulario. Si son iguales, es decir, si no se marcó un solo radio button, lanzo un mensaje de alerta en el que le digo al usuario que debe marcar uno, caso contrario, recorro a los elementos del formulario y según el tipo de elemento que sean, realizo determinadas acciones. Si es una caja de texto (type = "text"), verifico si se ha insertado contenido en ella, de no ser así, obligo al usuario a ingresar el dato faltante a través de una caja de diálogo. Si es un radio button (type = "radio") y está marcado, muestro en un mensaje de alerta el valor del mismo.

DEMO

Eventualmente, puedes hacer crecer este algoritmo de validación.

Saludos
__________________
«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
  #4 (permalink)  
Antiguo 18/04/2014, 17:29
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Hacer que una validación continúe si todo va bien

Gracias por responder treick y maestro Alexis88.

Antes que otra cosa, ¡caray, cómo quisiera uno que el foro de Prestashop fuera tan popular como el de Javascript o PHP!

Pero, ni modo!

Es cierto, treick, quién sabe cómo se me fue a olvidar el break! Bien hecho. Por otro lado, Alexis88, sin duda que se puede extraer valiosa información de la completa reestructuración del código que aportas!

Perfecto.

Saludos y hasta luego!

Etiquetas: Ninguno
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 08:10.