我对bootbox.js模态有问题。我想使用bootbox.dialog在执行Ajax并等待响应时暂停UI。如果我在带有确认的bootbox.alert中使用dialog.modal('hide');
,一切都会很酷(单击OK后,它会隐藏dialog.modal),但我不想每次都进行确认。当我在bootbox.alert外部使用dialog.modal('hide');
并确认它不会隐藏dialog.modal时,问题出在哪里?工作代码(隐藏模式)在success
内部,而工作代码不在error
var dialog = bootbox.dialog({
message: '<p class="text-center mb-0"><i class="fa fa-spin fa-cog"></i> Please wait while we do something...</p>',
closeButton: false
});
var checkboxId = "#" + $(this).attr('id');
var checked = $(this).is(":checked");
if (checked) {
$.ajax({
url: url,
type: "POST",
data: { estimatedCostId: @Model.EstimatedCostID },
success: function (data) {
if (!data.Success)
{
bootbox.alert(data.ErrorMessage, function () {
dialog.modal('hide');
});
$(checkboxId).prop('checked', !checked);
}
},
error: function (request, status, error) {
dialog.modal('hide');
bootbox.alert("Błąd serwera");
$(checkboxId).prop('checked', !checked);
}
});
}
答案 0 :(得分:1)
这很有可能是时间问题。如果您的AJAX调用“太快”,则在解决bootbox.dialog函数之前,将调用成功/失败回调。所以,这:
dialog.modal('hide');
最后在一个未定义的对象上被调用。我在最近的一个项目中遇到了类似的问题,并通过将AJAX调用置于shown.bs.modal事件中来解决了这个问题,就像这样:
var checkboxId = "#" + $(this).attr('id');
var checked = $(this).is(":checked");
var dialog = bootbox.dialog({
message: '<p class="text-center mb-0"><i class="fa fa-spin fa-cog"></i> Please wait while we do something...</p>',
closeButton: false
})
// this is the change
.on('shown.bs.modal', function(){
if (checked) {
$.ajax({
url: url,
type: "POST",
data: { estimatedCostId: @Model.EstimatedCostID },
success: function (data) {
if (!data.Success)
{
bootbox.alert(data.ErrorMessage, function () {
dialog.modal('hide');
});
$(checkboxId).prop('checked', !checked);
}
},
error: function (request, status, error) {
dialog.modal('hide');
bootbox.alert("Błąd serwera");
$(checkboxId).prop('checked', !checked);
}
});
}
});
答案 1 :(得分:1)
您也可以通过简单的方式使用此
bootbox.hideAll();