Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/10/2012, 06:24
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Validación completa de formulario Javascript

En primer lugar te señalo que tu html contiene errores. Una vez hecha correctamente la identificación de los campos como te señalo @caricatos, estás cometiendo el siguiente error.
Hay dos formas básicas de hacerlo, la primera, ir verificando cada campo y, si hay error, mostrar un mensaje y cancelar el envío, la otra, realizar todas las validaciones, acumular los mensajes de error y mostrarlos todos juntos.

Creo que el siguiente ejemplo es más ilustrativo, las validaciones no son necesariamente las mismas, pero por ahí no pasa el problema, sino por la manera en que intentás cancelar el submit.

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <style type="text/css">
  7. /*<![CDATA[*/
  8. label{
  9. width: 150px;
  10. display: inline-block;
  11. }
  12.  
  13. /*]]>*/
  14.  
  15. <script type="text/javascript">
  16. //<![CDATA[
  17.  
  18. function validar(){
  19. var mensaje = "";
  20. var nombre = document.getElementById('nombre').value;
  21. var email = document.getElementById('email').value;
  22. var email2 = document.getElementById('email2').value;
  23. var formato = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  24.  
  25. // validamos si el campo nombre está vacío o no
  26. nombre = nombre.replace(/(<([^>]+)>)/ig,""); // quitás posible código html
  27. nombre = nombre.replace(/^\s+/g,'').replace(/\s+$/g,'');// limpias espacios en blanco al inicio y final del nombre
  28. if(nombre == ''){
  29. //alert('Ingrese su nombre')
  30. mensaje += "<p>falta nombre<\/p>";
  31. //return false;
  32. }
  33.  
  34. var regex_email = formato.test(email);
  35.  
  36. if((regex_email != true)||(email == "")){
  37. //alert('Email no válido');
  38. mensaje += "<p>falta email 1<\/p>";
  39. //return false;
  40. }
  41.  
  42. var regex_email2 = formato.test(email2);
  43.  
  44. if((regex_email2 != true)||(email2 == "")){
  45. //alert('Email2 no válido');
  46. mensaje += "<p>falta email 2<\/p>";
  47. //return false;
  48. }
  49.  
  50. if(email != email2){
  51. //alert('los emails no coinciden');
  52. mensaje += "<p>email no coincide<\/p>";
  53. //return false;
  54. }
  55.  
  56. if(mensaje == ""){
  57. /// Si no hubo ningún error, el form se procesa
  58. alert('gracias ' + nombre);
  59. }else{
  60. document.getElementById('mensajes').innerHTML = mensaje;
  61. return false;
  62. }
  63. }
  64.  
  65. //]]>
  66. </head>
  67. <div>
  68. <form action="#" onsubmit="return validar();"><label for="nombre">Nombre:</label> <input type="text" value="" id="nombre" name="nombre" /><br />
  69. <label for="email">Email:</label> <input type="text" value="" id="email" name="email" /><br />
  70. <label for="email2">Verificar Email:</label> <input type="text" value="" id="email2" name="email2" /><br />
  71. <input type="submit" value="Enviar" /></form>
  72. </div>
  73. <div id="mensajes"></div>
  74. </body>
  75. </html>


En el ejemplo señalado se comprueban todos los campos y luego se genera un mensaje.
Luego hacé lo siguiente, descomenta los alert() y el return false; en cada validación, con lo que recibirás los mensajes individualmente y se cancelará el envío.

Espero te haya orientado
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.