A esos 18 elementos, añádeles una clase en particular, por ejemplo:
Luego, solo es cuestión de que tomes al conjunto de elementos que poseen dicha clase y los valides:
Código Javascript
:
Ver originalvar formulario = document.getElementById("id_formulario"),
requeridos = formulario.getElementsByClassName("requerido"),
total = requeridos.length;
formulario.addEventListener("submit", function(event){
event.preventDefault();
var enviar = true;
for (var i = 0; i < total; i++)
if (!requeridos[i].value.length){
alert ("Debe completar el campo " + requeridos[i].name);
requeridos[i].focus();
enviar = false;
break;
}
if (enviar) this.submit();
}, 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 originalvar formulario = document.getElementById("id_formulario"),
requeridos = formulario.getElementsByClassName("requerido"),
map = Array.prototype.map;
formulario.addEventListener("submit", function(event){
event.preventDefault();
var enviar = map.call(requeridos, function(elemento){
return elemento.value.length;
}).indexOf(0);
if (enviar == -1) this.submit();
}, 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