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

问题描述 投票:0回答:1

我有一种情况需要做以下事情:

  • 对与字符串匹配的对象中的所有值运行循环。 (这很容易)
  • 然后,一旦匹配该字符串,就会在屏幕上抛出一个要求输入的模态。
  • 等待模态关闭,更改对象值然后继续循环到下一个。如果有另一个对象与此值匹配,请打开一个新模态并重复。
  • 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
}
javascript jquery modal-dialog
1个回答
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
})
© www.soinside.com 2019 - 2024. All rights reserved.