在JavaScript jQuery中,如何等待模态在继续循环之前关闭



我有一个我需要做以下情况的情况:

  • 通过一个循环运行与字符串匹配的对象中的所有值。(这很容易)
  • 然后,一旦匹配该字符串,就在屏幕上扔了一个模态要求输入。
  • 等待模态关闭,更改对象值然后继续到下一个循环。如果还有另一个对象与此匹配值,打开新的模态并重复。
  • 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
}

您可以将$.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
})

最新更新