Значение ожидания в начальной загрузке подтверждает модальный?

Вопрос кажется глупым, но я не могу понять, как ждать кнопку подтверждения для возврата значения. Javascript основан на одном потоке, поэтому мне нужно знать, как я могу установить что-то вроде функции обратного вызова до нажатия кнопки, это структура диалога:

<div class="modal fade" id="confirmation" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">Confirm</h4>
            </div>
            <div class="modal-body">
                <label>Are you sure?</label>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default btn-ok" data-dismiss="modal">Continue</button>
                <a class="btn btn-danger" data-dismiss="modal">Cancel
                </a>
            </div>
        </div>
    </div>
</div>

<button id="go">press me</button>

и JS:

$(document).ready(function()
{
    $('#go').click(function()
    {
        $('#confirmation').modal('show');
        //if the user has pressed the .btn-ok button then an alert appear
        alert(true);
    })
});

На практике, когда пользователь нажимает кнопку, появляется диалоговое окно начальной загрузки, мне нужно отображать предупреждение, только если пользователь нажимает кнопку "Продолжить". .bnt-ok, но на самом деле я не могу понять, как это сделать. Кто-то может показать мне, как? Благодарю.

JSFIDDLE

ОБНОВИТЬ

1 пользователь запускает событие и функцию one выполняется:

one: function()
{
    if(two()) //if function two return true then show alert
    {
        alert(true);
    }
}

2 Функция два показывает диалог начальной загрузки:

 two: function()
 {
    $('#confirmation').show();

   //here I need to check if the user has pressed btn-ok, if yes,
   //I need to return true, otherwise false

   return true;
 }

3 Проблема в функции two, потому что нет способа остановить функцию, пока пользователь не нажмет кнопку. Таким образом, отображается диалоговое окно подтверждения, но функция возвращает true. Как я могу ждать клика пользователя?

1 ответ

Решение

Просто прикрепите обработчик кликов к .btn-ok элемент.

В качестве таких:

$('.btn-ok').click(function(){
   alert(true);
});

jsFiddle

РЕДАКТИРОВАТЬ:

Проверьте решение вашей проблемы, используя обещания ES6.

const modal = new Promise(function(resolve, reject){
       $('#confirmation').modal('show');
       $('#confirmation .btn-ok').click(function(){
           resolve("user clicked");
       });
       $('#confirmation .btn-danger').click(function(){
           reject("user clicked cancel");
       });
      }).then(function(val){
        //val is your returned value. argument called with resolve.
        alert(val);
      }).catch(function(err){
        //user clicked cancel
        console.log("user clicked cancel", err)
      });

Обновлен jsFiddle. Обратите внимание, что он использует обещания ES6, и вы должны проверить поддержку браузера или перенести свой код (например, с помощью babel).

Я хорошо понимаю эту проблему. Решение Pure Typescript выглядит следующим образом:

const result: boolean = confirm(message);
                if (result == true) {
                    return ConfirmationResult.ConfirmationResultPositive;
                } else {
                    return ConfirmationResult.ConfirmationResultNegative;
                }

где ConfirmationResult.ConfirmationResultPositive является некоторым перечислением. Функция подтверждения сделки показывает стандартное окно js и ожидает пользовательский результат (блокирует дальнейшее выполнение). К сожалению, у начальной загрузки нет этой стандартной функциональности. Например, WinForms, WPF и UMP (clear async) имеют одинаковое стандартное поведение. Я также полагаю, что с Promise<> мы можем обойти его с помощью начальной загрузки.

Другие вопросы по тегам