Foros del Web » Programando para Internet » Javascript »

Problema con return false

Estas en el tema de Problema con return false en el foro de Javascript en Foros del Web. Hola a todos, Estoy intentando hacer un formulario que comprueba que rellenas todos los campos y que comprueba también que el email es correcto, es ...
  #1 (permalink)  
Antiguo 21/05/2009, 13:45
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 11 meses
Puntos: 0
Problema con return false

Hola a todos,

Estoy intentando hacer un formulario que comprueba que rellenas todos los campos y que comprueba también que el email es correcto, es decir que tiene @, punto, etc.
El caso es que al validar el formulario cuando le doy a submit me ejecuta y la función que comprueba los campos pero no ejecuta el return false después de decirme que faltan varios campos por poner, lo he revisado de arriba a abajo peor no consigo entender porque no funciona. Os pongo el código por si podéis ayudarme, con la parte de comprobar el email creo que también me he liado pero bueno lo más urgente es que al darle a Enviar no me deje enviar el formulario si falta algun campo.

Código HTML:
<script type="text/javascript">
function vaciar(control)
{
  control.value='';
}
function mail(email){

    var mailres = true;            
    var cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890@._-";
    
    var arroba = document.formulario.email.indexOf("@",0);
    if ((document.formulario.email.lastIndexOf("@")) != arroba) arroba = -1;
    
    var punto = document.formulario.email.lastIndexOf(".");
                
     for (var contador = 0 ; contador < texto.length ; contador++){
        if (cadena.indexOf(texto.substr(contador, 1),0) == -1){
            mailres = false;
            break;
     }
    }

    if ((arroba > 1) && (arroba + 1 < punto) && (punto + 1 < (document.formulario.email.length)) && (mailres == true) && (document.formulario.email.indexOf("..",0) == -1))
     mailres = true;
    else
     mailres = false;                
    return mailres;

} 
function validar(){
	var txt = "";
	var formulario = document.formulario;
   if (document.formulario.nombre.value.length==0){ 
	   txt = txt + "Debe que escribir su nombre\n";
   }	
   
   if (document.formulario.apellidos.value.length==0){ 
		txt = txt + "Debe que escribir sus apellidos\n";
   }	

    if (document.formulario.email.value.length==0){ 
		txt = txt + "Debe que escribir su email\n";		
	}
	else if (document.formulario.email.value.length!=0){
				mail(email);
	}
	if (document.formulario.comentarios.value.length==0){ 
	   txt = txt + "Debe escribir sus comentarios\n";
   }	
	if(txt.length>0)
	{
		txt = "Los siguientes campos son obligatorios:\n\n" + txt;
		alert(txt);
		return false;		
	}
	formulario.submit();
} 
</script>
<form id="formulario" name="formulario" action="enviar_mail.php" method="post"  >
    <fieldset>
    	<legend>Formulario de Contacto</legend>
    <label for="nombre">*Nombre:</label> <input id="nombre" class="caja" type="text" name="nombre" accesskey="n" tabindex="1" value="Escriba aquí su nombre" onfocus="vaciar(this)"  />
    <br/>
    <label for="apellidos">*Apellidos:</label> <input name="apellidos" id="apellidos" class="caja" type="text"  accesskey="a" tabindex="2" value="Escriba aquí su apellido" onfocus="vaciar(this)" />
     <br/>
    <label for="email">*E-mail:</label><input name="email" id="email" class="caja" type="text"  accesskey="c" tabindex="3" value="Escriba aquí su e-mail" onfocus="vaciar(this)" onblur="mail(email)"  />
     <br/>
    <label for="comentarios">*Comentarios:</label><textarea name="comentarios" id="comentarios" class="caja"  cols="32" rows="6" accesskey="s" tabindex="4" onfocus="vaciar(this)"   >Escriba aquí sus comentarios</textarea>
    <p class="enviar">
    <input name="Submit" type="submit" accesskey="e" tabindex="5" onclick="validar();" value="Enviar"  />
    <input type="reset" value="Borrar" accesskey="b" tabindex="6" /></p>
    </fieldset>
    </form> 
  #2 (permalink)  
Antiguo 21/05/2009, 15:09
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: Problema con return false

Código javascript:
Ver original
  1. if(txt.length>0)
  2.     {
  3.         txt = "Los siguientes campos son obligatorios:\n\n" + txt;
  4.         alert(txt);
  5.         return false       
  6.     }else{
  7.     return true
  8. }

Código HTML:
<form id="formulario" name="formulario" action="enviar_mail.php" method="post" onSubmit="return validar()"  >
<!-- -->
    <input name="Submit" type="submit" accesskey="e" tabindex="5" value="Enviar"  /> 
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */

Última edición por America|UNK; 21/05/2009 a las 15:19
  #3 (permalink)  
Antiguo 21/05/2009, 15:21
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Problema con return false

Otro cambio ademas del ya dicho

<form id="formulario" name="formulario" action="enviar_mail.php" method="post" onsubmit="return validar(); " >

y quietarlo del boton de Enviar

y a decir vdd no es necesario en la funcion enviar el submit...
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
  #4 (permalink)  
Antiguo 21/05/2009, 16:43
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Problema con return false

Muchas gracias a ambos por responder tan rápido, funciona perfectamente tal y como decis vosotros.

Mañana intentaré ponerme a arreglar el tema de validar el email pero una tengo una duda sobre lo que has de que no es necesario en la funcion enviar el submit Avatar810. ¿Qué quieres decir con eso exactamente?

La función de que el botón enviar sea de tipo submit es para que envie el formulario y con el onsubmit del form lo que hacemos es ejecutar la función que queremos justo cuando el usuario pulsa el botón de enviar ¿no? Antes había probado a validar uno a uno todos los campos poniendoles un onblur y con otra función que daba un error si lo dejaban vacío pero no se si es eso a lo que te refieres.
  #5 (permalink)  
Antiguo 21/05/2009, 17:00
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Problema con return false

haga41 a lo que me refiero en si es a la ultima linea de la funcion validar() osea formulario.submit(); esta instruccion no es indispensable

tienes tu forma y tu accion
con el boton de tipo submit le indicas que hay que realizar la accion
con el evento onsubmit, antes de ser enviado realizas la validacion.
este evento se quede esperando respuesta con la etiqueta response que se coloco antes de la llamada a la funcion.
en caso de recibir un false, no realiza el submit, en caso de recibir un true o no recibir nada se envia el formulario...
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
  #6 (permalink)  
Antiguo 24/05/2009, 11:13
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Problema con return false

Ok, Avatar810 gracias por la explicación, ahora ya entiendo lo que quieres decir que el "formulario.submit()" del fianl no hace falta si llamo a la función desde un onsubmit.

Por cierto tengo una duda que no se si iría en este foro pero si me podéis ayudar lo agradecería. Para terminar de comprobar el formulario he creado un función que me compruebe el campo e-mail, parte del código era de este post.

Las comprobaciones que he hecho son las siguientes:

1 - Que no lleve ñ, acentos ni diéresis
2 - Que lleve arroba y no este ni la principio ni al final
3 - Que lleve al menos un punto y no este ni al principio ni al final.

Tengo dudas sobre si tambén debería comprobar que si hay guiones bajos o guiones altos no vayan al principio ni al final, pero creo que eso sería todo ¿no? He buscado por internet los caracteres prohibidos para los e-mails pero no he encontrado gran cosa.

Este es el código que me ha quedado por si a alguien le interesa, iría dentro de un archivo .js.

Código HTML:
function validar(){
	var mail = document.formulario.email.value;	
	var tamano = (document.formulario.email.value.length) - 1;
	var formulario = document.formulario;
	var arroba = "@";
	var punto = ".";
	var txt = "";	
	var caracteres = /^[ñáéíóúñüÁÉÍÓÚÑ]+$/i; 
   if (document.formulario.nombre.value.length==0){ 
	   txt = txt + "Debe que escribir su nombre\n";
   }	   
   if (document.formulario.apellidos.value.length==0){ 
		txt = txt + "Debe que escribir sus apellidos\n";
   }
    if (document.formulario.email.value.length==0){ 
		txt = txt + "Debe que escribir su email\n";		
	}
	else if (document.formulario.email.value.length!=0){
		if (mail.indexOf(caracteres) ==-1){
				alert('Debe escribir un formato de e-mail válido, sin eñes ni acentos');
				return false
		}			
			if(mail.indexOf(arroba) ==-1){
				alert('Debe escribir un formato de e-mail válido');
				return false
			}
			if ((tamano == mail.lastIndexOf(arroba)) || (mail.indexOf(arroba) == 0)){ 
				alert('La arroba no puede estar al principio ni al final');
				return false
			} 
	if(mail.indexOf(punto) ==-1){
				alert('Debe escribir un formato de e-mail válido');
				return false
			}
			if ((tamano == mail.lastIndexOf(punto)) || (mail.indexOf(punto) == 0)) { 
				alert('El punto no puede estar al principio ni al final');
				return false
			} 
	}
	if (document.formulario.comentarios.value.length==0){ 
	   txt = txt + "Debe escribir sus comentarios\n";
   }	
	if(txt.length>0)
	{
		txt = "Los siguientes campos son obligatorios:\n\n" + txt;
		alert(txt);
		return false		
	} 
	else {
	return true
	}
} 
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 18:53.