В Javascript JQuery, как дождаться закрытия модального цикла в цикле for, прежде чем продолжить? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть ситуация, когда мне нужно сделать следующее:

  • Выполнить цикл для всех значений в объекте, который соответствует строке.(Это достаточно просто)
  • Затем, после сопоставления этой строки, выведите на экран модальное окно, запрашивающее ввод.
  • Дождитесь закрытия модального окна, измените объектЗначение затем перейдите к следующему в цикле.Если есть другой объект, который соответствует этому значению, откройте новый модал и повторите.
  • После завершения цикла for отправьте данные с помощью пост-вызова ajax.

У меня проблема в том, чтобы дождаться закрытия модального окна и обновления значения, прежде чем продолжить.Поскольку я не хочу, чтобы все модалы появлялись одновременно.Мне нужно сделать паузу, когда модал отображается, возобновить, когда модал скрыт.

for (var i = 0; i < resultCustom.length; i++) {
if (resultCustom[i].Value == "Ask_User") {
    $('#ModalAsk').modal('show').on('hidden.bs.modal', function (e) {
        // do something...
    })
    break;

  }
}
$.post('@Url.Action("UpdateAction","Home")', resultCustom).done(function(data){
        player = data.player;
        load()
    });
// What is below is inside my modal as the onclick function for my submit button.
function SubmitAsk(i) {
    $('#ModalAsk').modal('hide')
    var input = document.getElementById("userinput").value
    resultCustom[i].Value = input
}

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете заменить $.map() на for цикл, .one() на .on() и использовать .queue(), .promise() и .then() для достижения ожидаемого результата.

$({}).queue("wait", $.map(resultCustom, function(value, index) {
  return function(next) {
    // do stuff
    if (value.Value == "Ask_User") {
      $('#ModalAsk').modal('show').one('hidden.bs.modal', function (e) {
        // do something...
        next()
      })
    }

  }
}))
.dequeue("wait")
.promise("wait")
.then(function() {
  // done
})
...