Sin enrrollarme demasiado quisiera ver si alguien me puede echar un cable con el siguiente problema de validación.
Cuento con un formulario dinámico -según la categoría seleccionada en un campo select, se crea un formulario u otro-, ahora bien, requiero validar del lado del cliente (antes de hacerlo del lado del servidor), los campos que se van a enviar por formulario.
El tema es que hay campos obligatorios (casi todos), pero también tengo 6 campos tipo "input type=file" es decir de carga de archivos que son para cargar imágenes, estas imágenes serán opcionales, es decir, si el usuario tiene imágenes descriptivas, podrá subirlas, en caso contrario, el formulario debería poder enviarse sin problemas.
Ahora bien, cuento con 2 códigos, uno que se encarga de validar que se haya seleccionado una categoría para evitar enviar el campo en blanco (valida los campos select) y otro que me hace una validación global de todo el formulario (campos del tipo input type=text ), mismo que funciona perfectamente bien, a excepción de que no permite el envío del formulario porque me hace también la validación de las imágenes las cuales no son obligatorias.
ESTE ES EL CODIGO QUE VALIDA LOS SELECT
Código Javascript:
Ver original
function validar(form){ if (form.categoria.options[form.categoria.selectedIndex].value == 0){ alert("Antes de continuar, selecciona una Categoría."); form.categoria.focus(); return false; } if (form.estado.options[form.estado.selectedIndex].value == 0){ alert("Antes de continuar, selecciona un Estado."); form.estado.focus(); return false; } if (form.municipio.options[form.municipio.selectedIndex].value == 0){ alert("Antes de continuar, selecciona un Municipio."); form.municipio.focus(); return false; } form.submit(); }
ESTE ES EL CODIGO QUE VALIDA LOS CAMPOS (lo conseguí aquí mismo)
Código Javascript:
Ver original
var form = document.getElementById("formulario"); form.addEventListener("submit", function(event){ event.preventDefault(); var campo = true, elementos = this.elements, total = elementos.length; for (var i = 0; i < total; i++){ if (!elementos[i].value.length){ alert ("Debes de ingresar el " + elementos[i].name); elementos[i].focus(); campo = false; break; } } if (campo){ this.submit(); } }, false);
Mi duda es, hay alguna manera de unificar ambos códigos para que un solo código me pueda validar la selección de elementos de tipo select y los campos vacios de tipo text y que a su vez por medio de un identificador id omita la validación de los campos input type=file (campos de imágenes no obligatorios).
He buscado por todos lados y es muy raro que esta duda no se haya dado, pues todos los códigos de validación de formularios que he visto, validan todos los campos como (todos obligatorios), se me hace raro que nadie haya tenido la necesidad de validar campos requeridos y omitir los no requeridos, así como también la validación de campos de tipo select, todo en un mismo código.
De antemano muchas gracias por todos los comentarios, consejos y sugerencias.