我正在将模态从 Bootstrap 3 升级到 4。我有一些代码将更新打开模态的选项(特别是背景和键盘选项)。在 Bootstrap 3 中,我通过运行以下命令完成了此操作:
$('.modal').data('bs.modal').options.backdrop = newBackdropValue;
$('.modal').data('bs.modal').options.keyboard = newKeyboardValue;
当我将其升级到 Bootstrap 4 时,我收到了
options
未定义的错误。然后我尝试将其移至使用 _config
,因为这似乎是这些选项现在所在的位置,但它实际上并未更新模式的行为。
在查看 Bootstrap 4 代码时,我注意到它调用了
_setEscapeEvent
,它似乎在键盘上放置了一个侦听器,但我找不到删除此侦听器的公共函数。
在我开始研究并尝试在 Modal 上使用私有方法之前,希望了解人们如何做到这一点。
用于禁用
$('#modal').off('keydown.dismiss.bs.modal');
用于启用
$('#modal').on('keydown.dismiss.bs.modal', function(event) {
if (event.which === 27) {
event.preventDefault();
$('#detailselector').modal('hide')
}
});
let modal; //assuming you assign your modal into this variable
let bootstrapInstance = bootstrap.Modal.getInstance(modal);
bootstrapInstance._config.keyboard = false; // or true
您应该能够使用数据中的
_config
对象来更新模态。只需确保在显示模式之前完成即可...
演示:https://codeply.com/go/DhB7TXVdfc
$('#myModal').on('show.bs.modal',function(){
// change the options that were set in data-attributes
$('#myModal').data("bs.modal")._config.backdrop = false;
$('#myModal').data("bs.modal")._config.keyboard = false;
});
还要记住,模式必须具有
tabindex="-1"
才能使 ESC 键盘选项起作用!