2012-03-26 20 views
0

Ich habe diesen Code geschrieben, um eine Eingabeaufforderung anzuzeigen, bevor ein Formular gesendet wird. Wenn der Wert der Formulareingabe größer als 100 ist, wird ein Dialogfeld angezeigt, in dem der Benutzer ungefähr darüber informiert wird, wie lange die Verarbeitung dauert. Wenn sie auf "OK" klicken, sollte sie "true" zurückgeben und das Formular senden. Wenn sie auf "Abbrechen" klicken, sollte sie "false" zurückgeben und das Formular nicht senden.jQuery JavaScript wird nicht richtig/falsch zurückgegeben

Das Problem ist, dass das Formular nicht auf diese Antwort wartet, es wird trotzdem übermittelt. Ich kann nicht herausfinden, was los ist ...

Hier ist der Code:

$(document).ready(function() { 
    $("form#generate_vouchers").submit(function(){ 
    if($("input#quantity").val() > 100){ 
     var warning = "It will take around " + Math.round(($("input#quantity").val()/23)) + " seconds to generate this batch.<br />Generation will continue even if you leave this page."; 
     //Does around 23 codes per second, nearly all of that time is inserts. 
     $('<div title="Batch information"></div>').html(warning).dialog({ 
      draggable: false, 
      modal: true, 
      minWidth: 350, 
      buttons: { 
       "Cancel" : function() { 
        $(this).dialog("close"); 
        return false; 
       }, 
       "Yes": function() { 
        $("input#submit").hide(300, function(){ 
         $("img#loader").show(300); 
        }); 
        return true; 
       } 
      } 
     }); 
    } 
    else{ 
     $("input#submit").hide(300, function(){ 
      $("img#loader").show(300); 
     }); 
    } 
    }); 
}); 
+0

Verwendung 'e.preventDefault()' und 'Rückkehr false' Kombination ... – Val

Antwort

2

einen Dialog angezeigt nicht die Ausführung stoppen und warten, bis es geschlossen ist. Ihre Sendefunktion wird fortgesetzt und die return true und return false tun nichts.

Was Sie tun müssen, ist das Formular sofort zu stoppen (mit e.PreventDefault unten), dann in der Yes Rückruf senden Sie das Formular erneut.

$("form#generate_vouchers").submit(function(e){ 
if($("input#quantity").val() > 100){ 
    e.preventDefault(); // stop submit 
    var warning = "It will take around " + Math.round(($("input#quantity").val()/23)) + " seconds to generate this batch.<br />Generation will continue even if you leave this page."; 
    //Does around 23 codes per second, nearly all of that time is inserts. 
    $('<div title="Batch information"></div>').html(warning).dialog({ 
     draggable: false, 
     modal: true, 
     minWidth: 350, 
     buttons: { 
      "Cancel" : function() { 
       $(this).dialog("close"); 
      }, 
      "Yes": function() { 
       $("form#generate_vouchers")[0].submit(); // submit form manually 
       $("input#submit").hide(300, function(){ 
        $("img#loader").show(300); 
       }); 
      } 
     } 
    }); 
} 
else{ 
    $("input#submit").hide(300, function(){ 
     $("img#loader").show(300); 
    }); 
} 
}); 

Beispiel - http://jsfiddle.net/infernalbadger/ajRr7/

+0

Hallo, danke für die Antwort. Ihr Code löst den Dialog nicht aus, ich habe Ihren Code mit meiner Revision verbessert, was perfekt funktioniert, außer dass das Formular nicht gesendet wird, wenn Sie auf "Ja" klicken. Ich erhalte eine Fehlermeldung: Uncaught TypeError: Die Eigenschaft 'submit' von Objekt # ist keine Funktion. Weißt du, was es sein könnte? Vielen Dank. –

+0

m90, ich bin mir nicht sicher, was Sie meinen, die [0] wurde von mir nicht hinzugefügt, und es gibt den gleichen Fehler ohne das. Kannst du bitte etwas ausarbeiten? Vielen Dank. –

+0

Ich weiß nicht, warum Sie Fehler bekommen? Mein Beispiel funktioniert für mich in Chrome, Firefox und IE. Die [0] erhält das dom-Element für das Formular und ruft submit darauf auf. Umgeht das jquery-Ereignis [Reference] (https://developer.mozilla.org/de/DOM/form.submit). Es zeigt auch den Dialog in allen Browsern für mich. –

Verwandte Themen