2012-03-21 10 views
13

El código está atascado en un bucle cuando intento capturar un envío de formulario. El propósito es reemplazar un valor de la forma antes de que se apague.Bucle infinito de envío de formulario mediante el evento jquery

$('form').submit(function(e){ 
    e.preventDefault(); 
    $.ajax({ 
     type: "POST", 
     url: 'convert.asp', 
     data: $('form').serialize(), 
     success: function(response){ 
     $('input[name="field1"]').val(response); 
     $('form').submit(); 
     } 
    }); 
    return false; 
}); 

¿Alguien tiene alguna idea?

ACTUALIZACIÓN: Originalmente tenía que estar vinculado a un evento de clic de botón y estaba funcionando, pero quería conservar el elemento de la tecla [enter] del botón Enviar. Al ver que el código es algo ilógico, ¿sería mejor capturar una pulsación de tecla?

+2

Entonces ... publica el formulario a través de AJAX, y luego '.submit()' de nuevo? ¿Por qué enviarlo dos veces? Solo elimine el segundo '$ ('form'). Submit()'. – Blazemonger

+0

@ mblase75 'e.preventDefault();' – Christoph

+0

@ mblase75 está justo aquí, no hay necesidad de la entrega interna. Ha vinculado el evento de envío del formulario a la función dentro, por lo que la segunda llamada llama al primero nuevamente y así sucesivamente. – dougajmcdonald

Respuesta

42

Supongo que su ajax es un intento de validar el formulario antes de su eventual envío. En ese caso, simplemente desvincula la función de validación antes de enviar el formulario.

success: function(response){ 
    $('input[name="field1"]').val(response); 
    // Add unbind to remove validations 
    $('form').unbind().submit(); 
    } 
+0

gracias, esto funcionó a la perfección! – greener

+0

** + 1 ** ¿Cómo se las arregló para entender qué quería decir? – gdoron

+0

¡Perfecto! muy inteligente: D se desvincula porque llama a itslef en enviar .. así que si lo desvincula no se volverá a llamar: D – aimiliano

6

En el éxito que se activa otra submit ...

$('form').submit(function(e){ 
    e.preventDefault(); // redundant, you return false in the end. <<<=== 
    $.ajax({ 
     type: "POST", 
     url: 'convert.asp', 
     data: $('form').serialize(), 
     success: function(response){ 
     $('input[name="field1"]').val(response); 
     $('form').submit(); // <=== delete this! <<<<================= 
     } 
    }); 
    return false; 
}); 
1

de enviar el formulario, evitar que se presentó únicamente para enviar el formulario, que consigue impidió obtener presentará ... :-D

+0

Excelente comentario, pero no una respuesta. .. :-D – gdoron

+0

@gdoron me gusta: -D – Christoph

+0

@gdoron necesita más votos negativos. – Christoph

Cuestiones relacionadas