Hacer una 'AjaxForm' sobre la marcha
-
28-10-2019 - |
Pregunta
Estoy tratando de usar ajaxForm
en mi forma creada en la marcha. De hecho, mi aplicación producirá un enlace 'sobre la mosca' y al hacer clic en ese enlace, producirá un ajaxForm
(de nuevo en la marcha de jQuery!), Así que usé el .live()
función con ajaxForm()
. Este es mi equivocado código:
$('form').live('submit', function() {
$(this).ajaxForm({dataType: 'html', success: function(data) {
alert(data);
}});
return false; // For preventing page refresh!
});
En mi formulario, cuando hago clic en el botón Enviar, la página se actualiza.
¿Hay una solución?
Solución
Como otros han dicho, tu return false
Deberia trabajar.
Entonces, algo más está mal. Asegúrese de que JQuery esté cargado correctamente y que su manejador en la suma realmente ejecuta colocando el código de depuración en él.
Además, asegúrese de tener Firebug instalado y habilitado (o equivalente para su navegador) para que pueda realizar su depuración.
Otros consejos
Intente usar event.stoppropagation (); que es una función jQuery.
Para hacerlo, deberá tomar el objeto del evento como parámetro para el Handeler:
$('form').live('submit', function(event){
y use esta línea en lugar de return false;
:
event.stopPropagation();
los return false
debería funcionar, pero es una mejor práctica hacer event.preventDefault()
o event.stopPropagation()
Cuando no tienes necesidad de hacer ambas cosas. En este caso sería event.preventDefault()
Porque desea detener la acción predeterminada de enviar el formulario. Pero como dije return false;
Debería haber funcionado en su caso, así que sospecho que podría recibir algún tipo de errores con el complemento que está utilizando. Si yo fuera tú, volvería a ver la documentación para sucomplemento y asegúrese de que sus opciones sean correctas. Justo en la parte posterior veo un dataType: 'html'
y solo puede haber 'xml', 'script', or 'json'
Como se indica en la documentación ... es posible que desee echar un vistazo a su uso del complemento.
Es posible que tengas que llamar preventDefault
en lugar de "regresar falso". Pseudo código de ese caso de uso de jQuery live
Con la forma combinada con AJAX está a continuación:
//Override form submit
$("form").live("submit", function (event) {
event.preventDefault();
var form = $(this);
$.ajax({
url: form.attr('action'), // Get the action URL to send AJAX to
type: "POST",
data: form.serialize(), // get all form variables
success: function(result){
// ... do your AJAX post result
}
});
});
Además, no estoy seguro de si con AJAXFORM (como no he usado AjaxForm) necesitas usar jQuery.live
. Inferir del documento, es posible que no lo necesite en absoluto.