2012-03-21 2 views
13

Il codice è bloccato in un ciclo quando si tenta di catturare una presentazione del modulo. Lo scopo è sostituire un valore del modulo prima che si spenga.Ciclo infinito di modulo inviare utilizzando jquery evento

$('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; 
}); 

Qualcuno ha qualche idea?

AGGIORNAMENTO: Inizialmente avevo legato a un evento clic del pulsante e stava funzionando, ma volevo conservare l'elemento chiave [invio] del pulsante di invio. Vedere che il codice è un po 'illogico, prendere un keypress sarebbe un'idea migliore?

+2

Quindi ... si invia il modulo tramite AJAX e quindi '.submit()' di nuovo? Perché inviarlo due volte? Basta rimuovere il secondo '$ ('form'). Submit()'. – Blazemonger

+0

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

+0

@ mblase75 è proprio qui, non è necessario il submit interno. Hai vincolato l'evento di invio del modulo alla funzione all'interno così la seconda chiamata chiama di nuovo la prima e così via. – dougajmcdonald

risposta

42

Presumo che il tuo ajax sia un tentativo di convalidare il modulo prima della sua eventuale presentazione. In tal caso, basta separare la funzione di convalida prima di inviare il modulo.

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

grazie, questo ha funzionato perfettamente! – greener

+0

** + 1 ** Come sei riuscito a capire cosa intendeva? – gdoron

+0

Perfetto! molto intelligente: D si esegue un unbind perché chiama itslef su submit .. quindi se lo si disaggrega non verrà più chiamato: D – aimiliano

6

Nella successo che innescare un altro presentare ...

$('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

Si invia il modulo, impedire la presentazione solo per inviare il modulo, che viene impedito di ottenere presentato ... :-D

+0

Commento eccellente, ma non una risposta. .. :-D – gdoron

+0

@gdoron Mi piace: -D – Christoph

+0

@gdoron ha bisogno di più downvotes però. – Christoph