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