2012-05-29 1222 views
25

estoy usando jQuery con el plugin de validación en http://docs.jquery.com/Plugins/Validation/validateuna forma de presentación de la función de jQuery submitHandler Validar complemento

Quiero evitar que la forma de presentar después de que sus procesos de validación y Submission hecho a través de AJAX. Tengo el siguiente código:

$("#myform").validate({ 
    rules: {...}, 
    submitHandler: function(form) { 
     alert("Do some stuff..."); 
     //submit via ajax 
     return false; //This doesn't prevent the form from submitting. 
    } 
}); 

Sin embargo, el problema con esto es que el submitHandler envía el formulario a pesar de que tengo una declaración return false; en la última línea de la función de tratamiento. Quiero evitar el comportamiento predeterminado y detener el envío del formulario porque ya lo he enviado a través de ajax.

¿Cómo debo evitar que se envíe el código después de pasar por los códigos ajax en la función submitHandler?

Respuesta

38

lo hago así y funciona exactamente cómo se quieren que funcione:

$("#myform").submit(function(e) { 
    e.preventDefault(); 
}).validate({ 
    rules: {...}, 
    submitHandler: function(form) { 
     alert("Do some stuff..."); 
     //submit via ajax 
     return false; //This doesn't prevent the form from submitting. 
    } 
}); 
+0

Haciendo exactamente lo mismo me sale Error de referencia: e no está definido e.preventDefault(); –

+0

También me sale ReferenceError: e no está definido e.preventDefault() ;, ¿alguna idea de qué significa exactamente esto? – Damainman

+0

Sé que esta es una publicación anterior, pero si alguien experimenta el mismo problema, debe escribir event.preventDefauld() en su lugar. e es un atajo para el evento. Si desea que e funcione, coloque e entre los corchetes de función, como esta función (e). – thar

1

Puede llamar event.preventDefault() en submit evento:

$("#myform").on("submit", function(event) { 
    event.preventDefault(); 
}); 
+0

La función submitHandler no parece tomar un parámetro de evento. – Carven

+0

@xEnOn Sí, es por eso que agregaría el evento 'submit' por separado al formulario. – VisioN

2

Tal vez usted puede validar externamente sin usar un botón de envío:

if($("#myform").valid()){ 
    alert("Do some stuff..."); 
} 
1

Puede codificar esto de una manera muy sencilla a través de "jQuery Walidate ". http://jquery.dop-trois.org/walidate/

Allí puede codificar una función, que se ejecutará en el envío. Busque devolución de llamada en la documentación.

0

Por desgracia, parece que la llamada: submitHandler: function(form){ no toma un argumento de evento por lo que parece que la única solución es una declaración return false así:

... 
submitHandler: function(form) { 
    //your code 
    return false; 
}, 
... 
20
$("#myform").validate({ 
    rules: {...}, 
    submitHandler: function(form, event) { 
     event.preventDefault(); 
     alert("Do some stuff..."); 
     //submit via ajax 
    } 
}); 

esperanza esta ayuda.

+1

Podría ayudar a explique a la persona que hace la pregunta qué hace 'event.preventDefault()', y por qué funciona (o proporcione una referencia). –

+3

Enganchando en el código fuente de la versión 1.12.0, está claro que configurar 'submitHandler 'evitará automáticamente el comportamiento predeterminado.Además, y según lo indicado por @ user3157665, la firma del controlador es 'submitHandler (form, event)' (la documentación no está sincronizada con el código fuente). – Younes

Cuestiones relacionadas