在Javascript JQuery中,如何在继续运行之前等待模式在for循环中关闭?

时间:2019-02-24 19:40:02

标签: javascript jquery modal-dialog

我遇到需要执行以下操作的情况:

  • 针对与字符串匹配的对象中的所有值运行循环。 (这很容易)
  • 然后,一旦该字符串匹配,就在屏幕上抛出一个模态, 要求输入。
  • 等待关闭模态,更改对象值,然后继续 进入下一个循环。如果还有另一个与此匹配的对象 值,打开一个新的模式并重复。
  • for循环结束后,通过ajax post调用发送数据。

我遇到的问题是等待模式关闭并继续更新值。由于我不希望所有模式同时显示。在显示模态时,我需要暂停它,在隐藏模态时,请恢复它。

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 :(得分:1)

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