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