Buenas.
No entiendo muy bien para qué querés redireccionar, la verdad. Me parece que lo que necesitás es que si no se pasa la validación, que no se envíe el formulario: anulás el envío, o sea, te quedás en la misma página. Si pasa la validación, enviás el formulario: no hace falta redireccionar nada, el atributo "action" le indica al navegador a dónde debe enviar el pedido (y a qué dirección te va a llevar).
En el tag <form> tendrías que tener un atributo onSubmit="return valida()" (Hay también otras formas de hacerlo pero ésta es la más sencilla). Cuando trates de enviar el formulario, si la función valida devuelve false, no se hace ningún envío. Si devuelve true, se manda. Y eso sería todo.
La función valida tendría que ser algo así:
Código:
function valida() {
if (los campos están vacíos) {
alert("algún mensaje de error");
return false;
}
return true;
}
Si los campos están vacíos, mostrás el error y devolvés false. Al usar return, la función deja de ejecutarse, o sea que nunca va a llegar a return true. Al devolver false, te quedaría algo así formulario.onsubmit = false; Con lo cual, el form no se envía.
Si los campos no están vacíos, la función no entra al if y se encuentra con return true; devuelve true y entonces el resultado es: formulario.onsubmit = true; O sea, que el formulario se envía.
Para hacer más validaciones y mantener las cosas ordenadas y limpias, podrías hacer una función valida() que se general. Ahí sólo llamás a otras funciones, que se encargan de hacer validaciones específicas (por ejemplo, campos en blanco, que no haya comillas, etc.
Por ej:
Código:
function valida() {
var mensaje = "";
mensaje += validarVacios();
mensaje += validarBlanco();
mensaje += validarOtraCosa();
/*
Cada validación va a devolver un mensaje en caso de error. O sea que si llegás al final
y la variable mensaje, donde se guardan justamente todos los mensajes, no está vacía
quiere decir que se detectaron errores. Mostrás los errores y devolvés false para
que no se envíe el formulario.
*/
if (mensaje != "") {
alert(mensaje);
return false;
}
/*
Si no hay nada dentro de la variable mensaje, quiere decir que se pasó la validación
Entonces, devolvés true, para que se mande el formulario normalmente
*/
return true;
}
function validarVacios() {
var mensaje = "";
var campo = document.formulario.alguncampo;
var campo2 = document.formulario.alguncampo2;
if (campo == "") { // si está vacío
mensaje += "el campo xxx es obligatorio\n"; // guardás un mensaje y agregás un salto de línea
}
if (campo2 == "") {
mensaje += "el campo xxx es obligatorio\n";
/*
mensaje de error en caso de que el segundo campo esté vacío
de esta manera ambas validaciones son independientes y podés mostrar
en qué campo está el o los errores
*/
}
return mensaje;
}
Bueno, esa es la idea, hay que implementarlo pero de esta forma el código queda más claro, es más fácil de mantener/modificar, te permite validar distintas cosas "modularmente" y podés mostrarle al usuario, de una sola pasada y sin abrir 800 ventanitas, en dónde está el error para que lo pueda corregir más fácilmente.
Suerte
Califa