Foros del Web » Programando para Internet » Javascript »

validando formulario con dos funciones

Estas en el tema de validando formulario con dos funciones en el foro de Javascript en Foros del Web. Tengo un problema, y no me doy cuenta cual es ( que es lo peor ), en el FORM en el onSubmit, puse dos funciones, ...
  #1 (permalink)  
Antiguo 22/02/2008, 17:02
Avatar de Durin  
Fecha de Ingreso: febrero-2008
Ubicación: Argentina-Santa fe-Funes
Mensajes: 93
Antigüedad: 16 años, 3 meses
Puntos: 1
validando formulario con dos funciones

Tengo un problema, y no me doy cuenta cual es ( que es lo peor), en el FORM en el onSubmit, puse dos funciones, una que valida el campo email ( que el codigo lo saque en un post, sobre las expresiones regulares) y la otra funcion valida los campos nombre y mensaje. El problema que tengo es que: si le doy al boton "enviar" sin haber rellenado ningun campo, me aparecen los "alerts" correspondientes, primero el de que el mail es invalido, y luego que tiene que escribir su nombre, pero despues igual lo envia. (y a su vez pasa lo mismo con el text area de mensaje) e igual lo envia aunque escriba un email erroneo. Por lo que yo creo es que hay un problema con los "return true". Bueno aqui les dejo el codigo, muchas gracias

CODIGO DEL SCRIPT:

Código:
<script type="text/javascript">

function validar_letra(e) { 
//el usuario no puede ingresar numeros ni caracteres especiales en el campo nombrefunction validar_letra(e) { 
tecla = (document.all) ? e.keyCode : e.which; 
if (tecla==8) return true; 
patron =/[A-Za-z\s]/; 
te = String.fromCharCode(tecla); 
return patron.test(te); 
} 

//PRIMERA FUNCION
//VALIDO EL EMAIL POR SEPARADO DEL RESTO DE LOS CAMPOS
function emailCheck (emailStr) { 

var emailPat=/^(.+)@(.+)$/; 
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"; 
var validChars="\[^\\s" + specialChars + "\]"; 
var quotedUser="(\"[^\"]*\")"; 
var ipDomainPat=/^[(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})]$/; 
var atom=validChars + '+'; 
var word="(" + atom + "|" + quotedUser + ")"; 
var userPat=new RegExp("^" + word + "(\\." + word + ")*$"); 
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$"); 
var matchArray=emailStr.match(emailPat); 
if (matchArray==null) { 
    alert("La dirección de correo parece ser inválida (verifique las @ y .)") 
    return false 
} 
var user=matchArray[1] 
var domain=matchArray[2] 

if (user.match(userPat)==null) { 
    alert("El nombre de usuario parece ser inválido.") 
    return false 
} 

var IPArray=domain.match(ipDomainPat) 
if (IPArray!=null) { 
      for (var i=1;i<=4;i++) { 
        if (IPArray[i]>255) { 
            alert("La dirección IP de destino es inválida!") 
        return false 
        } 
    } 
    return true 
} 

var domainArray=domain.match(domainPat) 
if (domainArray==null) { 
    alert("El dominio no parece ser válido.") 
    return false 
} 
var atomPat=new RegExp(atom,"g") 
var domArr=domain.match(atomPat) 
var len=domArr.length 
if (domArr[domArr.length-1].length<2 ||  
    domArr[domArr.length-1].length>3) { 
   alert("Las direcciones deben terminar con dominios de tres letras, o el código de país de dos letras.") 
   return false 
} 

if (len<2) { 
   var errStr="Dominio Inválido!"; 
   alert(errStr) 
   return false 
} 

return true; 
} 
//SEGUNDA FUNCION
//Valido los campos nombre y mensaje, que no esten vacios, ni rellenos con barra espaciadora
function validar() {
    //valido el nombre     
if (document.form1.nombre.value.length==0){ 
       alert("Tiene que escribir su nombre") 
       document.form1.nombre.focus() 
       return false; 
    } 
      nom = document.form1.nombre.value; //valida que el usuario no ingrese espacio en blanco al principio del campo
	  if ( Trim(nom)=="" ){ 
	  alert ("Por favor ingrese su nombre correctamente"); 
	  return false; 
      }
	 
//valido el mensaje    if (document.form1.mensaje.value.length==0){ 
       alert("Tiene que escribir su mensaje") 
       document.form1.mensaje.focus() 
       return false; 
    } 
	  msj = document.form1.mensaje.value;//valida que el usuario no ingrese espacio en blanco al principio del campo
	  if ( Trim(msj)=="" ){ 
	  alert ("Por favor ingrese su mensaje correctamente"); 
	  return false; 
      }

    //el formulario se envia 
	
    alert("Muchas gracias por enviar el formulario"); 
    document.form1.submit(); 
}

//funcion para validar los espacios en blanco que se ingresan con la barra espaciadorafunction Trim( str ) {
var resultStr = "";
resultStr = TrimLeft(str);
resultStr = TrimRight(resultStr);
return resultStr;
}

function TrimLeft( str ) {
var resultStr = "";
var i = len = 0;
if (str+"" == "undefined" || str == null) 
return "";
str += "";

if (str.length == 0) 
resultStr = "";
else { 
len = str.length;
while ((i <= len) && (str.charAt(i) == " "))
i++;
resultStr = str.substring(i, len);
}
return resultStr;
}

function TrimRight( str ) {
var resultStr = "";
var i = 0;
if (str+"" == "undefined" || str == null) 
return "";
str += "";
if (str.length == 0) 
resultStr = "";
else {
i = str.length - 1;
while ((i >= 0) && (str.charAt(i) == " "))
i--;
resultStr = str.substring(0, i + 1);
}

return resultStr; 
}

</script>
CODIGO DEL FORMULARIO
Código HTML:
//posiciono el cursor en el campo nombre al cargar el formulario
<body onLoad="this.document.form1.nombre.focus()">


<h1>Contacto</h1>

<div id="cto_body">
<div class="cto_coment"><p><strong>Tel:</strong> 54 9 0341 452 18 96<br/>

 Rosario - Argentina<br/>
<strong>e-mail:</strong> <a href="mailto:[email protected]">[email protected]</a>
  <p>
</div>

<form name="form1" action="../contacto/mail_adjuntos.php" method="post" 
enctype="multipart/form-data" id="cto_form1" onSubmit="emailCheck(this.email.value),validar();">   

  <label>nombre: (requerido)<br/>
  <input type="text" name="nombre" onKeyPress="return validar_letra(event)" >
  </label>
  <p>
 
    <label>e-mail: (requerido)<br/>
    <input type="text" name="email" />
	</label>
  </p>
 
  <p>
    <label>mensaje: (requerido)<br/>
    <textarea name="mensaje"></textarea>
    </label>
  </p>
  <label>(opcional)</label><br/>
  <font face="Arial, Helvetica, sans-serif">
    <input type='file' name='archivo' id='archivo' />
  </font></p>
  <div id="oo">
    <p>
      <label>
      <input type="submit" name="enviar" value="Enviar" >
      </label>
      <input type="reset" name="borrar" value="Borrar" />
      </label>
    </p>
  </div>
</form>
</div> 

</body> 

Última edición por Durin; 25/02/2008 a las 07:55
  #2 (permalink)  
Antiguo 22/02/2008, 17:21
Avatar de Durin  
Fecha de Ingreso: febrero-2008
Ubicación: Argentina-Santa fe-Funes
Mensajes: 93
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: validando formulario con dos funciones

ya he solucionado el problema en parte, puse un return en la funcion validar:
Código HTML:
<form name="form1" action="../contacto/mail_adjuntos.php" method="post" enctype="multipart/form-data" id="cto_form1" onSubmit="return validar(),emailCheck(this.email.value);"> 
Pero si no relleno el campo email, o lo hago erroneamente, me aparece el mensaje de email invalido, y despues el que dice gracias por enviar el formulario, y lo envia igual. Si alguien me puede ayudar con este problema, muchas gracias. Pense que podria poner otra funcion que sirva para controlar las dos funciones anteriores ( con un IF) , y si es correcto envia el formulario, pero no se si es posible hacer algo asi, como hacerlo
  #3 (permalink)  
Antiguo 22/02/2008, 21:59
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Re: validando formulario con dos funciones

Separa la logica, es decir; crea una funcion que solo valide el email, y el otro que valide el campo nombre... Luego crear una funcion adicional donde recien validas el formulario utilizando las dos primeras funciones...
__________________
Un Caballero Jura Lealtad. Usa su espada para suprimir la Injusticia No Conoce el Odio y Tampoco el AMOR...
  #4 (permalink)  
Antiguo 23/02/2008, 13:42
Avatar de Durin  
Fecha de Ingreso: febrero-2008
Ubicación: Argentina-Santa fe-Funes
Mensajes: 93
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: validando formulario con dos funciones

Son dos funciones por separado (fijate, que resalte en rojo las dos validaciones), primero valido el mail ( function emailCheck (emailStr) ), y luego valido el campo nombre, y el mensaje ( function validar() ). Como es lo que me dijiste de hacer otra validacion, no entendi bien, si me lo explicas con codigo mejor, muchas gracias

Última edición por Durin; 25/02/2008 a las 07:57
  #5 (permalink)  
Antiguo 25/02/2008, 07:52
Avatar de Durin  
Fecha de Ingreso: febrero-2008
Ubicación: Argentina-Santa fe-Funes
Mensajes: 93
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: validando formulario con dos funciones

intente hacer otra funcion, que valide el formulario cuando este recien esten validadas las otras dos funciones, (la del email, y la de los campos nombre y mensaje) pero me sigue validando una de las dos funciones y me envia el formulario igual, necesito ayudaaa
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:40.