Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/09/2008, 09:49
Avatar de Dundee
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