Señores, que tal, tengo la siguiente inquietud. Deseo que al momento de existir algún error de validación, el evento clic de un botón submit se detenga y en caso contrario, avance. A continuación, mi código:
$(document).ready(function() {
$("form[name=agregar] input[name=servicio]").focus();
$('#guardar').on('click', function (e) {
$.ajax({
type: $("form[name=agregar]").attr("method"),
url : $("form[name=agregar]").attr("action"),
data: $("form[name=agregar]").serialize(),
success: function(data) {
if (data.success == false) {
e.preventDefault();
e.stopPropagation();
var errores = "";
$("form[name=agregar] input[name=servicio]").attr('style', 'border: 1px solid #F00;');
$("form[name=agregar] input[name=servicio]").focus();
for(datos in data.mensaje){
errores += data.mensaje[datos] + "\n";
}
toastr.error(errores, "Información de Sistema");
return false;
}
},
error: function(error) {
}
});
});
});
Señores, edito para que se entienda más, pues créanme que he tratado un montón de formas para tratar de hacerlo.
Si se fijan, en el jQuery no hay ninguna validación directa, pues el flujo que realizo mediante ajax es ir a un método de un controlador de laravel. En este controlador realizo las validaciones y retorno los mensajes de error o success mediante json y eso es lo que está recibiendo.
Dado lo anterior, si pongo un e.preventDefault(); al principio, al estar todo bien, se va a quedar en la misma página y no redirigirá a la página en que aparece el listado de servicios (típico crud), así como si realizo un submit al estar todo bien, va a intentar nuevamente guardar datos y lógicamente ya van a estar vacíos y devolverá mensaje de error.
Para salir luego del paso, se me ocurre redireccionar y crear una sesión flash con el mensaje de success y colocar el e.preventDefault(); al principio, lo malo de esto, es que tendría que hacerlo en cada vista perteneciente a los create y update.
De antemano, muchas gracias.