Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/05/2012, 15:04
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: mejorar la validación de campos

un ejemplo para el email

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.  
  7. <style type="text/css">
  8. /*<![CDATA[*/
  9. label{
  10. width: 150px;
  11. display: inline-block;
  12. }
  13.  
  14. /*]]>*/
  15. <script type="text/javascript">
  16.  
  17. function validar(){
  18. var nombre = document.getElementById('nombre').value;
  19. var email = document.getElementById('email').value;
  20. var email2 = document.getElementById('email2').value;
  21. var formato = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  22.  
  23. // validamos si el campo nombre está vacío o no
  24. nombre = nombre.replace(/(<([^>]+)>)/ig,""); // quitás posible código html
  25. nombre = nombre.replace(/^\s+/g,'').replace(/\s+$/g,'');// limpias espacios en blanco al inicio y final del nombre
  26. if(nombre == ''){
  27. alert('Ingrese su nombre')
  28. return false;
  29. }
  30.  
  31. var regex_email = formato.test(email);
  32.  
  33. if((regex_email != true)||(email == "")){
  34. alert('Email no válido');
  35. return false;
  36. }
  37.  
  38. var regex_email2 = formato.test(email2);
  39.  
  40. if((regex_email2 != true)||(email2 == "")){
  41. alert('Email2 no válido');
  42. return false;
  43. }
  44.  
  45. if(email != email2){
  46. alert('los emails no coinciden');
  47. return false;
  48. }
  49. /// Si no hubo ningún error, el form se procesa
  50. alert('gracias ' + nombre);
  51. }
  52.  
  53. </script>
  54. </head>
  55. <div>
  56. <form action="#" onsubmit="return validar();">
  57. <label for="nombre">Nombre: </label><input type="text" value="" id="nombre" name="nombre" /><br />
  58. <label for="email">Email: </label><input type="text" value="" id="email" name="email" /><br />
  59. <label for="email2">Verificar Email: </label><input type="text" value="" id="email2" name="email2" /><br />
  60. <input type="submit" value="Enviar" />
  61. </form>
  62. </div>
  63. </body>
  64. </html>

las longitudes de las cadenas, tendrias que chequear la propiedad length

Para las alertas, crear una capa/span con un id asignado, por ejemplo
<span id="mensajes"></span>
y antes del return false; haces un innerHTML con el texto del error
Otra variante es que no hagas un return false por cada elemento validado, sino que lo hagas asi

al inicio de la función inicializás una variable con un valor = ""
var mensaje="";

en cada validacion por ejemplo, el nombre, en lugar de esto
if(nombre == ''){
alert('Ingrese su nombre')
return false;
}

hacés

if(nombre == ''){
mensaje += "<p>Falta nombre</p>";
}

se usa el += para concatenar los valores
después con otra

if((regex_email != true)||(email == "")){
mensaje += "<p>email no vválido</p>";
}


ahora si, trás todas las validaciones

if(mensaje != ""){
// haces un innerHTML a la capa que creaste con los mensajes con el valor de la variable mensaje
return false; // -> cancelás el submit
}

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