2013-07-04 4 views
5

So gibt es ein Formular, das ich nur senden möchte, wenn eine Bedingung aus der Datenbank mit Ajax überprüft wird. Ich verwende preventDefault() Methode, wenn die Bedingung wahr ist, d. H. Wenn ein Benutzer kein Resident ist, wird eine Variable in ajax successs function auf True gesetzt und preventDefault() wird jedoch aufgerufen, wenn das Formular immer übermittelt. Es wartet nicht darauf, dass der Ajax beendet wird, selbst wenn async auf false gesetzt ist. Hier ist der Code.Wie mache ich ein Formular warten auf Ajax zu beenden, bevor es übermittelt?

$('#button').click(function(e) {  
    if ($('#ca_resident').prop('checked') == true) { 
     amount=$('#user-amount').val().replace(/[,]/g,""); 
     project_name=$('#project_name').val(); 
     var not_resident = false; 
     $.ajax({ 
     url: '/main/verify_residence/', 
     type: 'POST', 
     aysnc: false, 
     data: { 
      value: amount, 
      name: project_name 
     }, 
     success: function(data){ 
      $("#verify_residence").html(data); 
      not_resident = true; 
     }, 
     dataType: 'html' 
     }); 
    } 
    if(not_resident){ 
     e.preventDefault(); 
    } 
    }); 
+0

verhindern, dass die Standard vor der Ajax-Aufruf und auf 'ajax.success' Sie können dann' form.submit() ' – Vogel612

+0

Try Return falsch; anstelle von e.preventDeafult(). –

+1

@ Vogel612 Ich habe das schon mal versucht. Dies verhindert, dass das Formular in irgendeiner Bedingung gesendet wird. Das Formular sollte einreichen, wenn ein Benutzer Residenzprüfung nicht fehlschlägt – user2488801

Antwort

4

das wird nicht funktionieren. Der Erfolg wird Feuer nach:

if(not_resident){ 
     e.preventDefault(); 
    } 

Wie es ist asynchron. Sie müssen immer auf den Button klicken Abbrechen dann senden Sie das Formular einmal Erfolg getroffen wird:

$('#button').click(function(e) {  
    var $form = $(this).closest('form'); 

    if ($('#ca_resident').prop('checked') == true) { 
     amount=$('#user-amount').val().replace(/[,]/g,""); 
     project_name=$('#project_name').val(); 
     $.ajax({ 
     url: '/main/verify_residence/', 
     type: 'POST', 
     aysnc: false, 
     data: { 
      value: amount, 
      name: project_name 
     }, 
     success: function(data){ 
      $("#verify_residence").html(data); 
      $form.submit(); 
     }, 
     dataType: 'html' 
     }); 
    } 


    e.preventDefault(); 

    }); 
+0

danke Liam, aber was ich brauche ist, wenn ein Benutzer die Residenzbedingung nicht erfüllt das Formular nicht, genau entgegengesetzt. 'e.preventDefault()' in der 'Erfolgsfunktion'. immer noch kein Glück – user2488801

+0

@ user2488801 das wird das tun, wenn der 'Erfolg' nicht getroffen wird. Das Formular wird nicht übermittelt. 'e.preventDefault();' stoppt das Senden des Formulars immer. '$ form.submit();' posten nur, wenn 'Erfolg' erreicht wird – Liam

+0

'Erfolg' ist ein Fall, wenn ein Benutzer die Validierung nicht besteht und nicht weiter sehen darf, d.h. keine Formularübergabe. – user2488801