Подождите "возвращаемое значение" из Javascript modal

Хорошо, я отнюдь не гуру JavaScript, и, возможно, я все еще думаю о разработке программного обеспечения для настольных компьютеров, но этого я пытаюсь достичь:

  • Я использую Модификации Bootstrap Twitter
  • В некоторых случаях, прежде чем действие произойдет, я хочу проверить его с помощью "Вы уверены?". (Да/Нет) Модальный диалог.

Вопрос:

  • Какова должна быть внутренняя логика?

Я имею в виду:

  • Пользователь нажимает кнопку А (в конечном счете выполняет действие А)
  • Я хочу запустить модальный, дождаться ввода (либо из двух кнопок - да/нет), либо передать его некоторой процедуре проверки перед выполнением (или нет) действийA

Этот мой HTML-код для модального (должны ли кнопки быть - каким-то образом) действовать через их onclick javascript-процедуры?) - также обратите внимание, что #confirmMessage будет переменной.

<div class="modal fade hide" id="confirmAlert">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">x</button>
        <h3 id="confirmTitle">Are you sure?</h3>
    </div>

    <div class="modal-body">
        <p id="confirmMessage">Body</p>
    </div>
    <div class="modal-footer">
        <a href="#" class="btn" data-dismiss="modal">Cancel</a>
        <a href="#" class="btn btn-danger">Yes</a>
    </div>
</div>

Просто идея:

  • Напишите функцию типа checkBeforeExec(message,functionToExec)
  • Установите #confirmMessage сообщение и да 'href до javascript:functionToExec
  • Имеет смысл?

Я знаю, что это может показаться немного запутанным - но я просто не знаю, что самый удобный для javascript способ сделать это будет...

Ответ 1

Я создал диспетчер диалога вокруг модального, с confirm вспомогательной функцией, которая делает это по существу:

var callback = function(result) {
  alert(result);
}); // define your callback somewhere

$('#confirmAlert').on('click', '.btn, .close', function() {
  $(this).addClass('modal-result'); // mark which button was clicked
}).on('hidden', function() {
  var result = $(this).find('.modal-result').filter('.btn-danger').length > 0; // attempt to filter by what you consider the "YES" button; if it was clicked, result should be true.

  callback(result); // invoke the callback with result
});

Кроме того, вы должны сделать кнопку "Отмена" и "Да" data-dismiss="modal".

Вот скрипка, с простым примером моего менеджера диалогов.

Обратите внимание, что если вы используете Bootstrap 3, вы должны добавить обработчик к событию hidden.bs.modal вместо hidden.

Ответ 2

С помощью jquery вы можете использовать что-то вроде

$('.btn').click(function(){
   val=$(this).val()
   if(val=='Yes'){
     //continue the processing
   }
})