Foros del Web » Programando para Internet » Javascript »

envio de formulario tras comprobación de campos OK

Estas en el tema de envio de formulario tras comprobación de campos OK en el foro de Javascript en Foros del Web. Hola tengo un problemilla de los muchos que me surjen a diario con JS , el tema es que tengo un formulario que es una ...
  #1 (permalink)  
Antiguo 11/09/2008, 09:49
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
envio de formulario tras comprobación de campos OK

Hola tengo un problemilla de los muchos que me surjen a diario con JS , el tema es que tengo un formulario que es una función de PHP:
Código:
  <form name="fvalida" method="post" action="../php/envio_pedido.php" onsubmit="valida_envia()" >
Y quiero que SOLO se produzca el action , (es decir el envió de este formulario) si se cumple que todos los campos son validados correctamente. El script JS funciona bien , es decir me devuelve mensajes alert de error en caso de que alguno de los campos NO se VALIDE correctamente , pero el problema es que SIEMPRE Me envía el formulario (o como creo se dice que se ejecuta el submit() ) ¿COMO Puedo hacer para que esto no suceda y solo se envie dicho formulario si TODOS los campos son validados correctamente?. Dejo aquí el script entero JS.
Código:
// JavaScript Document<script language="javascript">
function isMail(Cadena) {

	Punto = Cadena.substring(Cadena.lastIndexOf('.') + 1, Cadena.length)			// Cadena del .com
	Dominio = Cadena.substring(Cadena.lastIndexOf('@') + 1, Cadena.lastIndexOf('.')) 	// Dominio @lala.com
	Usuario = Cadena.substring(0, Cadena.lastIndexOf('@'))					// Cadena lalala@
	Reserv = "@/º\"\'+*{}\\<>?¿[]áéíóú#·¡!^*;,:"						// Letras Reservadas
	
	// Añadida por El Codigo para poder emitir un alert en funcion de si email valido o no
	valido = true
	
	// verifica qie el Usuario no tenga un caracter especial
	for (var Cont=0; Cont<Usuario.length; Cont++) {
		X = Usuario.substring(Cont,Cont+1)
		if (Reserv.indexOf(X)!=-1)
                	valido = false
	}

	// verifica qie el Punto no tenga un caracter especial
	for (var Cont=0; Cont<Punto.length; Cont++) {
		X=Punto.substring(Cont,Cont+1)
		if (Reserv.indexOf(X)!=-1)
			valido = false
	}
                        
	// verifica qie el Dominio no tenga un caracter especial
	for (var Cont=0; Cont<Dominio.length; Cont++) {
		X=Dominio.substring(Cont,Cont+1)
		if (Reserv.indexOf(X)!=-1)
			valido = false
		}

	// Verifica la sintaxis básica.....
	if (Punto.length<2 || Dominio <1 || Cadena.lastIndexOf('.')<0 || Cadena.lastIndexOf('@')<0 || Usuario<1) {
		valido = false
	}
	
	// Añadido por El Código para que emita un alert de aviso indicando si email válido o no
	if (valido==false) {
		alert('Email  no válido.')
		return false;	//cambiar por return true para hacer el submit del formulario en caso de validacion correcta
	} else {
		return true;
	}
}

function valida_envia(){
    //valido el nombre
    if (document.fvalida.name.value.length==0){
       alert("Tiene que escribir su nombre");
       document.fvalida.nombre.focus();
       return 0;
    }
	   //valido el apellido
    if (document.fvalida.surname.value.length==0){
       alert("Tiene que escribir sus apellidos");
       document.fvalida.surname.focus();
       return 0;
    }
	   //valido la dirección
    if (document.fvalida.address.value.length==0){
       alert("Tiene que escribir la dirección de envio del pedido");
       document.fvalida.address.focus();
       return 0;
    }
	
		   //valido la dirección
    if (document.fvalida.address.value.length==0){
       alert("Tiene que escribir la dirección de envio del pedido");
       document.fvalida.address.focus();
       return 0;
    }
   //valido Ciudad
    if (document.fvalida.city.value.length==0){
       alert("Tiene que escribir una ciudad de destino");
       document.fvalida.city.focus();
       return 0;
    }
			   //valido la Provincia
    if (document.fvalida.state.value.length==0){
       alert("Tiene que escribir su provincia");
       document.fvalida.state.focus();
       return 0;
    }
				   //valido lael código postal
    if (document.fvalida.zip.value.length==0){
       alert("Tiene que escribir su código postal");
       document.fvalida.zip.focus();
       return 0;
    }
  
 			   //validoel país
    if (document.fvalida.country.value.length==0){
       alert("Tiene que escribir su país");
       document.fvalida.country.focus();
       return 0;
    }
  		   //validoel telf y movil
    if (document.fvalida.telf.value.length<9 &&  document.fvalida.celular.value.length<9){
       alert("Tiene que escribir almenos un teléfono de contacto");
       document.fvalida.telf.focus();
       return 0;
    }

			   //validoel mail
    if (document.fvalida.email.value.length==0){
       alert("Tiene que escribir su Email");
       document.fvalida.email.focus();
       return 0;
    }
	
	if ( !isMail(document.fvalida.email.value) )
  	return 0;
  else
	{
    //el formulario se envia
    alert("Su pedido ha sido enviado correctamente");
    return true;
	}
}
Un saludo y gracias de antemano
  #2 (permalink)  
Antiguo 11/09/2008, 09:54
Avatar de Legoltaz  
Fecha de Ingreso: agosto-2008
Mensajes: 325
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: envio de formulario tras comprobación de campos OK

Código PHP:
<form name="fvalida" method="post" action="../php/envio_pedido.php" onSubmit="return valida_envia()" 
Código PHP:
if(campos_vacios_etc...){
<!-- 
Instrucciones para la validación //-->
return false;
}
else{
return 
true;

  #3 (permalink)  
Antiguo 11/09/2008, 10:14
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: envio de formulario tras comprobación de campos OK

Cita:
Iniciado por Legoltaz Ver Mensaje
Código PHP:
<form name="fvalida" method="post" action="../php/envio_pedido.php" onSubmit="return valida_envia()" 
Código PHP:
if(campos_vacios_etc...){
<!-- 
Instrucciones para la validación //-->
return false;
}
else{
return 
true;

Prerdón pero no veo la diferencia entre esto que me escribes y lo que yo he puesto , ya que supongo que es igual poner 0 que false ¿no?.
Un saludo
  #4 (permalink)  
Antiguo 11/09/2008, 10:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 48
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: envio de formulario tras comprobación de campos OK

pues te equivocas pues loque te dice Legoltaz es que en el metodo onSubmit le coloques un return de tu metodo validar
fijate bien la diferencia esta en el return ;)
  #5 (permalink)  
Antiguo 11/09/2008, 11:42
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: envio de formulario tras comprobación de campos OK

Hola

Fijate que no es exactamente igual , te falta return. En este caso

<form name="fvalida" method="post" action="../php/envio_pedido.php" onsubmit="return valida_envia()" >

Suerte

EDITO: Qué lento soy
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 11/09/2008, 12:36
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: envio de formulario tras comprobación de campos OK

Cita:
Iniciado por Adler Ver Mensaje
Hola

Fijate que no es exactamente igual , te falta return. En este caso

<form name="fvalida" method="post" action="../php/envio_pedido.php" onsubmit="return valida_envia()" >

Suerte

EDITO: Qué lento soy
Ok gracias asumo mi error y os doy las gracias

Un saludo
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 20:09.