一旦Bootstrap模式选项已经存在,请更改该选项
Change Bootstrap modal option once it already exists
我正在使用Bootstrap Modal。我申报,我叫它,我展示它…一切似乎都很好。
但是,如果我有一个已经存在的模态,之前显示的"keyboard"属性为false,并且我想在旅途中更改它,该怎么办?我的意思是:
首先,我创建了一个Modal(正如您所看到的,我声明Modal将键盘属性设置为false):
$('#myModal').modal({
show: false,
backdrop: true,
keyboard: false
});
但随后我声明了这个事件处理程序,这意味着如果发生了"某事",我希望将键盘属性设置为true。
$('#myModal').on('shown', function(e) {
if (something){
$('#myModal').modal({keyboard: true});
}
}
所以,当我去
$("#myModal").show();
事件处理程序没有做它应该做的事情,因为一旦按下Escape键,我就无法关闭模态。但我完全确信"某事"是真的,我已经检查并重新检查了$('#myModal').modal({keyboard: true})
的执行情况。
有没有线索表明为什么这没有更新配置选项的值?
要更改已经启动的Bootstrap插件的配置设置,如Modal,您需要访问附加到元素的插件对象,如$('#pluginElement').data['somePlugin']
,然后在其中设置options
。
对于Modal,您需要:
$('#myModal').data('modal').options.keyboard = true;
JSFiddle演示(旧版)
对于Bootstrap 3(如@Gerald评论中所述),您需要
bs.modal
:
$('#myModal').data('bs.modal').options.keyboard = true;
等待模式示例
这有点超出了OP的范围,但这是我两次搜索同一个解决方案(我的记忆力很差),两次遇到这个问题,这让我找到了最终的答案。我的问题是如何将一个已经初始化并显示的"可关闭"模态变成一个"不可关闭"的模型。在罕见的情况下,即使另一个用户需要这个答案,以下是我根据公认的答案所做的:
*使用引导程序3
$('#modal').off('keyup.dismiss.bs.modal'); // disable escape key
$('#modal').data('bs.modal').options.backdrop = 'static';
$('#modal button.close').hide();
请注意,我没有按照上面的建议将options.keyboard属性更改为false(然后调用escape())。我无法做到这一点,所以在查看了Bootstrap源代码后,我发现它所做的只是简单地删除一个"keyup.session.bs.modal"的事件侦听器。
要重新启用(在我的场景中,当模型被隐藏时):
$('#modal').on('hidden.bs.modal', function (e) {
$(this).data('bs.modal').escape(); // reset keyboard
$(this).data('bs.modal').options.backdrop = true;
$('button.close', $(this)).show();
});
这看起来非常笨拙,肯定会在即将到来的Bootstrap版本中打破,但目前有效。。。
干杯:)
对于引导程序4
要禁用逃生按钮上的关闭模式:
$('#myModal').off('keydown.dismiss.bs.modal');
点击背景时禁用关闭模式:
$('#myModal').data('bs.modal')._config.keyboard = false;
正如夜间警告的那样,这可能会在未来版本的bootstrap中打破。
对于引导4.1
options
属性应替换为_config
。
例如
const modal = $('#modal');
/*
|------------------------------------------------------------------------------
| Now, let us assume you already opened the modal (via js or data attribute).
| If you want to access the options and modify.
|------------------------------------------------------------------------------
*/
// [Not Required] Let us see what the object is like.
console.log( modal.data('bs.modal')._config );
// Override the options to lock modal.
modal.data('bs.modal')._config.backdrop = 'static';
modal.data('bs.modal')._config.keyboard = false;
// [optional] You can also hide all data-dismiss buttons too.
modal.find("[data-dismiss='modal']").hide();
// Revert all actions above.
modal.data('bs.modal')._config.backdrop = true;
modal.data('bs.modal')._config.keyboard = true;
modal.find("[data-dismiss='modal']").show();
设置background和esckey以在模态已经打开时不关闭模态
$('div[name="modal"]').data('bs.modal').options.backdrop = 'static';
$('div[name="modal"]').off('keydown.dismiss.bs.modal');
取消设置背景和键esc的目的是不关闭模式
$('div[name="user_profile_modal"]').data('bs.modal').options.backdrop = true;
$('div[name="user_profile_modal"]').data('bs.modal').escape();
您还可以在HTML标记中添加一个属性:data keyboard="false"
<div id="myModal" class="modal hide fade" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"></div>
它对我有用!
如果您不知道模态是否已经打开,并且需要配置模态选项(Bootstrap 3),请选择另一个选项:
var $modal = $('#modal');
var keyboard = false; // Prevent to close by ESC
var backdrop = 'static'; // Prevent to close on click outside the modal
if(typeof $modal.data('bs.modal') === 'undefined') { // Modal did not open yet
$modal.modal({
keyboard: keyboard,
backdrop: backdrop
});
} else { // Modal has already been opened
$modal.data('bs.modal').options.keyboard = keyboard;
$modal.data('bs.modal').options.backdrop = backdrop;
if(keyboard === false) {
$modal.off('keydown.dismiss.bs.modal'); // Disable ESC
} else { //
$modal.data('bs.modal').escape(); // Resets ESC
}
}
感谢@nokturnal
对于引导程序5:
通过调用bootstrap.Modal.getInstance(domEl)
let domEl = $('#myModal')[0];
let bootstrapInstance = bootstrap.Modal.getInstance(domEl);
bootstrapInstance._config.show = false;
bootstrapInstance._config.backdrop = true;
bootstrapInstance._config.keyboard = false;
对我来说,这种方法是最好的
$('#modal').on('hide.bs.modal', function () {
return false;
});
它防止模态在任何可能的情况下关闭:
- 按下退出键
- 在模态外部单击
- 单击"关闭"按钮
- 甚至使用CCD_ 9
- 在BootStrap菜单栏中为所选项目设置背景,类似于BootStrap中的父导航选项
- 从Bootstrap获取活动选项卡ID并将其传递给PHP
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- 如何在angular bootstrap ui中聚焦活动导航选项卡中的拳头输入字段
- jquery点击bootstrap 3选项卡上的事件
- 自动更改 Twitter Bootstrap 选项卡
- 如何创建一个“下一步”按钮,使用 Java 脚本和 Twitter Bootstrap 切换选项卡
- 一旦Bootstrap模式选项已经存在,请更改该选项
- 使用AngularJS在Bootstrap选项卡之间移动DOM元素
- Angular Bootstrap选项卡在单击选项卡后更改url
- Bootstrap 3通过点击按钮添加文本并显示在新选项卡中
- Bootstrap-select.js-选择一个选项后,整个选择将消失
- 在Bootstrap选项卡中操作Nicescroll scrolbar
- AngularJS Bootstrap Tabset 选项卡在 IE8 中不起作用的选项卡之间的选项卡导航
- 禁用 Bootstrap 3 折叠手风琴中的切换选项
- AngularJS bootstrap-ui 选项卡拉入本地 html 内容
- 使用 JavaScript 初始化 bootstrap-markdown 并自定义选项
- 如何使用 Twitter Bootstrap 3 显示选项卡内容
- 使用 jQuery 自动执行 Bootstrap 动态选项卡
- 让选项卡适用于 BootStrap