Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/04/2014, 17:05
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 3 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