Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2008, 17:02
Avatar de Durin
Durin
 
Fecha de Ingreso: febrero-2008
Ubicación: Argentina-Santa fe-Funes
Mensajes: 93
Antigüedad: 17 años, 1 mes
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