2016-06-24 4 views
0

Ich habe ein Problem, bei dem #complete_sale_button im folgenden Code zweimal sehr schnell angeklickt wird; Es gibt 2 Dialogfelder, die angezeigt werden.bootbox.confirm verhindert, dass es aufgerufen wird, wenn ein anderes Dialogfeld vorhanden ist

Ich weiß, ich könnte eine Statusvariable var isOpen = TRUE machen und überprüfen, bevor Sie den Dialog erneut öffnen; aber ich habe viele dieser Bestätigungsdialoge und andere Bootboxdialoge wie Warnungen und Aufforderungen.

Es wäre schön, wenn ich die Bootbox-Funktionen erweitern könnte, um 2 Dialoge nicht zuzulassen. Das hält meinen Code sauberer. Weißt du, wo ich Dokumente finden kann, wie ich es erweitern kann, oder ein Beispiel dafür? (Ich sah http://bootboxjs.com/documentation.html#bb-confirm-dialog-options)

Hier Code jetzt:

$("#complete_sale_button").click(function(e) 
{ 
    e.preventDefault(); 
    bootbox.confirm('Are you sure you are done with sale?', function(result) 
    { 
     if(result) 
     { 
      window.location = 'http://localhost/sales/complete'; 
     } 
    }); 
}); 

Antwort

0

Verwendung bootbox.hideAll().

$("#complete_sale_button").click(function(e) { 
 
    e.preventDefault(); 
 
    bootbox.hideAll(); 
 
    bootbox.confirm('Are you sure you are done with sale?', function(result) { 
 
    if (result) { 
 
     window.location = 'http://localhost/sales/complete'; 
 
    } 
 
    }); 
 
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdn.jsdelivr.net/bootbox/4.1.0/bootbox.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
 
<button id="complete_sale_button">Click Me</button>

+0

Wie gesagt, ich wollte keine meiner Dialoge ändern; Also habe ich einen besseren Weg gefunden. Wenn Sie einen Blick darauf werfen könnten und lassen Sie mich wissen, ob dies eine gute Lösung ist; das wäre hilfreich. Ansonsten werde ich nur den gesamten Code anhand Ihres Beispiels modifizieren. Mein Code funktioniert auch für alle Dialoge ohne Mods für jeden Bootbox-Aufruf –

0

Hier ist eine Lösung, die ich mit, dass kam keine Änderungen an meinem ursprünglichen Code. Das scheint ziemlich gut zu funktionieren; aber ich möchte ein Feedback oder Randfälle, die mir fehlen.

$(document).on('show.bs.modal','.bootbox.modal', function (e) 
{ 
    var isShown = ($(".bootbox.modal").data('bs.modal') || {}).isShown; 
    //If we have a dialog already don't open another one 
    if (isShown) 
    { 
     //Cleanup the dialog(s) that was added to dom 
     $('.bootbox.modal:not(:first)').remove(); 

     //Prevent double modal from showing up 
     return e.preventDefault(); 
    } 
}); 
+0

Das ist auch eine Lösung, aber nur bootbox.hideAll(); erfordert nicht viel Änderung in Ihrem Code. –

+0

Ich habe ungefähr 40 - 50 von ihnen, also würde es einige Zeit dauern, sie alle zu testen. –

+0

Sie können auch das body-Tag überprüfen - es wird die Klasse 'modal-open' haben, wenn ein Dialog angezeigt wird (der auch alle normalen Bootstrap-Dialoge abdecken würde, die Sie hinzufügen können). –

Verwandte Themen