2016-06-24 3 views
0

У меня проблема, если #complete_sale_button в коде ниже дважды щелкнул дважды очень быстро; появляется 2 диалоговых окна.bootbox.confirm запрещает его вызывать при наличии другого диалогового окна

Я понимаю, что могу сделать переменную состояния var isOpen = TRUE и проверить перед открытием диалога еще раз; но у меня есть много этих диалоговых окон подтверждения и других диалоговых окон боксов, таких как предупреждения и подсказки.

Было бы здорово, если бы я мог расширить функции бот-бокса, чтобы не допускать двух диалогов. Это улучшает мой код. Вы знаете, где я могу найти документы о том, как его расширить, или примерный способ сделать это? (Я смотрел на http://bootboxjs.com/documentation.html#bb-confirm-dialog-options)

Вот код прямо сейчас:

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

ответ

0

Использование 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

Как указано, я не хотел изменять какие-либо из моих диалогов; поэтому я придумал лучший способ. Если бы вы могли взглянуть на него и сообщить мне, если это хорошее решение; это было бы полезно. В противном случае я просто изменю весь код на основе вашего примера. Мой код работает для всех диалогов тоже без модов для каждого вызова bootbox –

0

Вот решение, которое я придумал, что не требует каких-либо изменений в моем исходном коде. Кажется, это работает очень хорошо; но мне нужна какая-то обратная связь или крайние случаи.

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

Это тоже решение, но добавление только bootbox.hideAll(); не требует больших изменений в вашем коде. –

+0

У меня около 40 - 50 из них, поэтому потребуется некоторое время, чтобы проверить их все. –

+0

Вы также можете проверить тег body - он будет иметь класс 'modal-open', когда будет показано диалоговое окно (которое также будет охватывать любые обычные диалоги Bootstrap, которые вы можете добавить). –

 Смежные вопросы

  • Нет связанных вопросов^_^