Ver Mensaje Individual
  #9 (permalink)  
Antiguo 11/06/2014, 09:45
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Simplificar la funcion

A esos 18 elementos, añádeles una clase en particular, por ejemplo:

Código HTML:
Ver original
  1. <input type = "text" name = "foo" class = "requerido" />

Luego, solo es cuestión de que tomes al conjunto de elementos que poseen dicha clase y los valides:

Código Javascript:
Ver original
  1. var formulario = document.getElementById("id_formulario"),
  2.     requeridos = formulario.getElementsByClassName("requerido"),
  3.     total = requeridos.length;
  4.  
  5. formulario.addEventListener("submit", function(event){
  6.     event.preventDefault();
  7.  
  8.     var enviar = true;
  9.  
  10.     for (var i = 0; i < total; i++)
  11.         if (!requeridos[i].value.length){
  12.             alert ("Debe completar el campo " + requeridos[i].name);
  13.             requeridos[i].focus();
  14.             enviar = false;
  15.             break;
  16.         }
  17.  
  18.     if (enviar) this.submit();
  19. }, false);

Cuando se produzca el evento submit, es decir, cuando envíes los datos del formulario para procesarse, cancelas dicho evento con el método preventDefault, tomas a los elementos del formulario con la clase requerido, calculas el total de estos y declaras una variable que utilizarás como comodín para determinar si enviarás o no los datos para su procesamiento, iniciando esta variable con el valor booleano true. Enseguida, iteras el conjunto de elementos requeridos y si alguno de ellos no tuviera contenido, muestras una alerta indicándole al usuario que debe completar el campo en cuestión, le das el enfoque, cambias el valor del comodín a false y sales del bucle. Finalmente, evalúas el valor del comodín, si sigue siendo true, es decir, si no se encontraron elementos sin completas, envías los datos a procesarse.

También puedes hacerlo de una manera más corta:

Código Javascript:
Ver original
  1. var formulario = document.getElementById("id_formulario"),
  2.     requeridos = formulario.getElementsByClassName("requerido"),
  3.     map = Array.prototype.map;
  4.  
  5. formulario.addEventListener("submit", function(event){
  6.     event.preventDefault();
  7.  
  8.     var enviar = map.call(requeridos, function(elemento){
  9.         return elemento.value.length;
  10.     }).indexOf(0);
  11.  
  12.     if (enviar == -1) this.submit();
  13. }, false);

En este caso, creas un array con la longitud de los valores de cada campo, a los cuales iteras con el método Array.prototype.map que es el equivalente de map() en PHP y al igual que dicha función, aplica una llamada de retorno a cada elemento del array en cuestión que en este caso es el conjunto de elementos requeridos. Luego, con el método indexOf buscas en el array resultante el valor 0 para saber así si algún elemento no tiene contenido. Finalmente, evalúas el resultado de lo anterior, si es igual a -1, es decir, si no se encontraron coincidencias, lo cual indica que todos los campos se completaron, envías los datos a procesarse.

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

Última edición por Alexis88; 11/06/2014 a las 09:51 Razón: Optimización