Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Validar campos vacios en formulario con javascript una sola vez

Estas en el tema de Validar campos vacios en formulario con javascript una sola vez en el foro de Javascript en Foros del Web. Hola! Soy nueva tanto en el foro como en html, javascript y esas cosas. Vengo con una duda que quizas no sea nueva... Validar un ...
  #1 (permalink)  
Antiguo 07/06/2014, 00:13
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Exclamación Validar campos vacios en formulario con javascript una sola vez

Hola! Soy nueva tanto en el foro como en html, javascript y esas cosas. Vengo con una duda que quizas no sea nueva... Validar un formulario con javascript.
La mayoria de los ejemplos que he encontrado por internet lo que hacen es validar un campo a la vez. ¿Que quiero decir? Primero valida "nombre", si "nombre" esta vacio muestra un alert, despues de completarlo la validacion continua con el siguiente campo y repite lo mismo hasta que todos los campos esten llenos. Sin embargo lo que yo necesito es que la funcion compruebe todos los campos y arriba del formulario "liste" de alguna manera los campos vacios de una sola vez. Si bien lo hago algo rudimentario xD, los "return false" no me dejan continuar ya que el primer return false hace que el resto del codigo no se ejecute :/.
Código Javascript:
Ver original
  1. function Comprobar(formulario)
  2. {  
  3. var nombreAp=document.getElementById('nombreApellido').value;
  4. var eMail=document.getElementById('email').value;
  5. var Asunto=document.getElementById('asunto').value;
  6. var Mensaje=document.getElementById('mensaje').value;
  7. if (nombreAp.length==0)
  8. {
  9. var errorNombre=document.createElement('p');
  10. errorNombre.innerHTML= 'No escribiste tu nombre';                  
  11. document.getElementById("Comentarios").appendChild(errorNombre);
  12. return false;
  13. }
  14. if (eMail.length==0)
  15. {
  16. var erroremail=document.createElement('p');
  17. erroremail.innerHTML='No escribiste tu email';
  18. document.getElementById("Comentarios").appendChild(erroremail);
  19. return false;
  20. }
  21. if (Asunto.length==0)
  22. {
  23. var errorAsunto=document.createElement("p");
  24. errorAsunto.innerHTML='No escribiste el asunto';            document.getElementById("Comentarios").appendChild(errorAsunto);
  25. return false;
  26. }
  27. if (Mensaje.length==0)
  28. {  
  29. var errorMensaje=document.createElement("p");
  30. errorMensaje.innerHTML='No escribiste el mensaje';
  31. document.getElementById("Comentarios").appendChild(errorMensaje);  
  32. return false;
  33. }
  34. return true;
  35. }

Mi duda es....¿Como puedo hacer para que siga la ejecucion?¿Hay alguna funcion parecida a return que detenga el envio del formulario pero deje a las demas lineas ejecutarse?

Codigo del formulario
Código HTML:
<div id="Comentarios"></div>
<form action="insertarDatos.php" method="post" id="formulario" name="formulario" onsubmit="return Comprobar();">
<h1>Contacto</h1>
<table align="center">
<tr>
td>Nombre y Apellido</td>
<td><input type="text" name="nombreApellido" id="nombreApellido"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email" id="email"></td>
</tr>
<tr>
<td>Asunto</td>
<td><input type="text" name="asunto" id="asunto"></td>
</tr>
<tr>
<td>Mensaje</td>
<td><textarea name="mensaje" id="mensaje"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Aceptar" id="Aceptar" name="Aceptar" onsubmit="return Comprobar();"></td>
</tr>
</table>
</form> 
  #2 (permalink)  
Antiguo 07/06/2014, 00:34
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Bienvenida a FDW

En lugar de hacerlo elemento por elemento, hazlo todo de una vez, al fin y al cabo, el proceso es el mismo.

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

Ahora la explicación. Primero, defino dos variables; la primera de ellas representa al formulario en cuestión al cual tomo por su id y la segunda es una variable que utilizaré como comodín para determinar si todos los campos del formulario se completaron o no y así enviar o no los datos del mismo para su procesamiento. Dicho comodín iniciará con el valor booleano true. Luego, con el método addEventListener, registro el evento submit, el cual es el que se ejecuta cuando enviamos los datos de un formulario a procesarse. Esto lo hago para ejecutar una función cuando esto se produzca.

Con el método preventDefault, prevengo que se ejecute dicho evento, lo cual me permitirá evaluar a cada elemento del formulario. Enseguida, tomo al conjunto de elementos del formulario y con ayuda de una estructura repetitiva (bucle), en este caso un for...in, los itero. En cada iteración, verifico la longitud del contenido de cada elemento; si ésta es falsa, es decir, si no hay contenido alguno en el elemento, muestro un mensaje de alerta en el cual le indico al usuario que debe de completar el campo cuyo nombre especifico al final de la línea, además, el valor del comodín cambiará a false y con la sentencia break, corto el flujo del bucle, saliendo del mismo puesto que al haberse detectado un elemento vacío, no deben de enviarse los datos para procesarse.

Finalmente, realizo la evaluación del comodín; si su valor es verdadero, que da igual colocar de cualquiera de las siguientes formas:

Código Javascript:
Ver original
  1. if (comodin == true) //Forma válida
  2. if (comodin) //Forma válida

Entonces, quiere decir que todos los campos del formulario han sido completados, puesto que el valor del comodín solamente cambia cuando se detecta un campo vacío, por lo tanto, procedo a enviar los datos del formulario haciendo uso del método submit. Obviamente si el valor del comodín es falso, es decir, si se detectó algún elemento del formulario sin completar, no se realizará el envío de los datos. Antes de que me lo preguntes, la palabra reservada this, en este caso hace referencia al formulario al que estamos afectando.

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; 07/06/2014 a las 00:46 Razón: Fe de erratas
  #3 (permalink)  
Antiguo 07/06/2014, 10:35
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Alexis88 gracias por responder :)
He puesto el codigo pero no me funciona :/ lo manda directamente sin pasar por la funcion. He intentado forzar un poco para que lo ejecute pero al ejecutarlo no imprime ningun error.
Lo que necesito que haga es algo como esto:

  #4 (permalink)  
Antiguo 07/06/2014, 11:07
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

¿Te aseguraste de que el id del formulario coincida con el que colocaste en el código?

Sería bueno que muestres la última implementación que hiciste para poder ayudarte. Por cierto, asegúrate de que el código JavaScript esté justo antes de la etiqueta </body> para que afecte al resto de elementos, no lo coloques en la cabecera, a menos que utilices una función que ejecute el código luego de la carga del DOM.
__________________
«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
  #5 (permalink)  
Antiguo 07/06/2014, 17:02
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Validar campos vacios en formulario con javascript una sola vez

id iguales, codigo antes de <body> pero no en la cabecera. Nada...
Código Javascript:
Ver original
  1. </HEAD>
  2.     <SCRIPT TYPE="text/javascript">
  3. var formulario = document.getElementById("id_formulario"),
  4. comodin = true;
  5.  
  6. formulario.addEventListener("submit", function(event){
  7. event.preventDefault();
  8.  
  9. var elementos = this.elements;
  10. for (var i in elementos){
  11. if (!elementos[i].value.length){
  12. alert("Debe de completar el campo " + elementos[i].name);
  13. comodin = false;
  14. break;
  15. }
  16. }
  17.  
  18. if (comodin){
  19. this.submit();
  20. }
  21. }, false);
  22.     </SCRIPT>
  23. <body>

Código HTML:
<form action="insertarDatos.php" method="post" id="id_formulario" name="formulario">
<h1>Contacto</h1>
<table align="center">
<tr>
<td>Nombre y Apellido</td>
<td><input type="text" name="nombreApellido" id="nombreApellido"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email" id="email"></td>
</tr>
<tr>
<td>Asunto</td>
<td><input type="text" name="asunto" id="asunto"></td>
</tr>
<tr>
<td>Mensaje</td>
<td><textarea name="mensaje" id="mensaje"></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Aceptar" id="Aceptar" name="Aceptar"></td>
</tr>
</table>
</form> 
De esta manera pasa directmente a subir el formulario ejecutando el "insertarDatos.php" que introduciria los campos en una base de datos.
Probe tambien como una funcion y llamandola desde el boton Aceptar pero lo que hace es no mostrarme los mensajes de que los campos estan vacios.
  #6 (permalink)  
Antiguo 07/06/2014, 17:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Creo que no leíste bien.

Cita:
Iniciado por Alexis88 Ver Mensaje
Por cierto, asegúrate de que el código JavaScript esté justo antes de la etiqueta </body>
Así como tienes el código, nunca afectará al formulario pues éste se carga después que el código. Realiza el cambio de posición del código JS y prueba. Ojo, <body> no es igual a </body>, con una indicas que inicia el cuerpo del documento, con la otra, indicas que finaliza el mismo.

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
  #7 (permalink)  
Antiguo 07/06/2014, 17:28
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Me parecia extraño si xD....pero bueno arreglado...
Código Javascript:
Ver original
  1. <body>
  2.     <SCRIPT TYPE="text/javascript">
  3.     var formulario = document.getElementById("id_formulario"),
  4.     comodin = true;
  5.  
  6. formulario.addEventListener("submit", function(event){
  7.     event.preventDefault();
  8.  
  9.     var elementos = this.elements;
  10.     for (var i in elementos){
  11.         if (!elementos[i].value.length){
  12.             alert("Debe de completar el campo " + elementos[i].name);
  13.             comodin = false;
  14.             break;
  15.         }
  16.     }
  17.  
  18.     if (comodin){
  19.         this.submit();
  20.     }
  21. }, false);
  22.     </SCRIPT>
Aunque sigue sin funcionar :/
  #8 (permalink)  
Antiguo 07/06/2014, 17:41
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Imagino que el formulario estará antes que ese script, ¿verdad?

Edito: Hice un pequeño ejemplo para que veas cómo funciona. El único cambio que hice en el código JavaScript, fue utilizar un bucle for clásico (no el for...in). También cambié de posición inicial al comodín, ahora se encuentra dentro de la función, para que cuando se detecte algún campo vacío, en el siguiente intento, vuelva a tener por valor true.

Ejemplo
Código

Analízalo y en base a lo que veas, realiza las modificaciones necesarias.

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; 07/06/2014 a las 18:09 Razón: Adición de ejemplo
  #9 (permalink)  
Antiguo 07/06/2014, 20:06
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Cambiado de lugar y si funciona :D
Pero sigo teniendo el mismo problema que con el return false, solo me devuelve un solo error por vez. Quiero que al hacer la validacion valide todos los campos de una y vea cual esta vacio y cual no y arriba liste los campos que estan vacios, como esta en la imagen que puse en otro mensaje.

Código Javascript:
Ver original
  1. <SCRIPT TYPE="text/javascript">
  2. var formulario = document.getElementById("id_formulario"),
  3. comodin = true;
  4.  
  5. formulario.addEventListener("submit", function(event){
  6. event.preventDefault();
  7.  
  8. var elementos = this.elements;
  9. for (var i in elementos){
  10. if (!elementos[i].value.length){
  11. var txt="Debe de completar el campo " + elementos[i].name;
  12. Comentarios.innerHTML=txt;
  13. comodin = false;
  14. break;
  15. }
  16. }
  17.  
  18. if (comodin){
  19. this.submit();
  20. }
  21. }, false);

Cambie el alert para que lo muestre en la pagina y no en una ventana.
  #10 (permalink)  
Antiguo 07/06/2014, 21:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

No quería hacerlo así, pero en ese caso, la estructura cambia un poquito.

Código Javascript:
Ver original
  1. var form = document.getElementById("miFormulario"),
  2.     salida = document.getElementById("miSalida");
  3.  
  4. form.addEventListener("submit", function(event){
  5.     event.preventDefault();
  6.    
  7.     salida.innerHTML = "Tienes que completar los siguientes campos:";
  8.  
  9.     var comodin = true,
  10.         elementos = this.elements,
  11.         total = elementos.length;
  12.  
  13.     for (var i = 0; i < total; i++){
  14.         if (!elementos[i].value.length){
  15.             salida.innerHTML += "<br />- " + elementos[i].name;
  16.             elementos[i].className = "falta";
  17.             comodin = false;
  18.         }
  19.         else{
  20.             elementos[i].className = null;
  21.         }
  22.     }
  23.  
  24.     if (comodin){
  25.         this.submit();
  26.     }
  27.     else{
  28.         salida.style.display = "block";
  29.     }
  30. }, false);

Siendo salida un elemento HTML, ya sea un <div>, un <p> o cualquier otro elemento de bloque, en el que se listarán los campos en donde no se ingresaron datos. La clase CSS falta le asigna un borde de color rojo al elemento en el que no se ingresó datos.

Ejemplo
Código

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; 07/06/2014 a las 22:16 Razón: Mejora
  #11 (permalink)  
Antiguo 07/06/2014, 22:06
 
Fecha de Ingreso: junio-2014
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Funciona! :D en el codigo que pusiste hay que cambiar innerText por innerHTML y ya comienza a mostrar los campos faltantes :D!
Muchisimas gracias!
  #12 (permalink)  
Antiguo 07/06/2014, 22:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Utilicé la propiedad innerText pues se trataba de texto simple, con innerHTML puedo introducir etiquetas HTML, por eso hice el cambio en la edición de mi respuesta, por los saltos de línea en la lista de elementos.

Revisa los enlaces, actualicé algunas cosas.

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
  #13 (permalink)  
Antiguo 07/01/2016, 12:20
 
Fecha de Ingreso: diciembre-2015
Mensajes: 369
Antigüedad: 8 años, 10 meses
Puntos: 4
Respuesta: Validar campos vacios en formulario con javascript una sola vez

tan sencillo como

<input type="password" nametitle="se necesita un pass" required="required"="password" placeholder="pass" >
mas fácil
  #14 (permalink)  
Antiguo 07/01/2016, 12:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar campos vacios en formulario con javascript una sola vez

Wilson, recuerda que todavía hay muchos usuarios que ya sea por razones laborales u otras, utilizan navegadores que no dan soporte a HTML5. La validación que muestras es nativa de HTML5 y ahí radica la incompatibilidad. De cualquier modo, es una buena opción, pero lo más importante es validar del lado del servidor.

P. D.: Se recomienda no revivir hilos con más de 6 meses de antigüedad.

Un saludo
__________________
«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
  #15 (permalink)  
Antiguo 02/04/2016, 16:22
 
Fecha de Ingreso: octubre-2015
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Pregunta Respuesta: Validar campos vacios en formulario con javascript una sola vez

Hola buenas tardes, estoy tratando de armar una función con una parte de este código, la cual estoy tratando de que se active con el evento onsubmit del form. La estoy referenciando desde un archivo externo en la cabezera del html, pero aun no logro que funcione.

De antemano gracias a quien pueda guiarme un poco...

Esto es lo que tengo:

HTML:

Código:
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Mi pagina.com</title>
    <script type="text/javascript" src="http://mipagina.com/js/funciones.js"</script>
</head>
<body>
<form id="formulario" action="http://mipagina.com/registrar" method="POST" onsubmit="return campovacio(this.id)">
<input name="Nombre" type="text" maxlength="20" placeholder="Nombre" title="Ingrese su Nombre" />
<input name="Apellido" type="text" maxlength="20" placeholder="Apellido" title="Ingrese su Apellido"/>
<input type="submit" value="Enviar"></input>

</form>
</body>
</html>

La función en el archivo externo funciones.js

Código:
function campovacio (id) {
var form = document.getElementById(id);
      
      elementos = this.elements,
      total = elementos.length;
  
  for (var i = 0; i < total; i++){
    if (!elementos[i].value.length){
      if (elementos[i].placeholder===""){
      alert ("Debes de ingresar el " + elementos[i].name);
      elementos[i].focus();
      comodin = false;
      break;  
      }
      else {
      alert ("Debes de ingresar el " + elementos[i].placeholder);
      elementos[i].focus();
      comodin = false;
      break; }
    }
  }
  
  if (comodin){
    return true;
  }
  else {
    return false;
  }
}

Etiquetas: campos, formulario, funcion, html, input, php, vacios, vez
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 22:56.