我使用的引导模态 。 我宣布,我称呼它,我表现出来......一切都似乎是确定。
但是,如果我以前使用“键盘”属性设置为false出什么已经存在的模式,我想改变它的去? 我的意思是这样的:
首先,我创建一个模式做这个(你可以看到,我宣布把模式键盘属性设置为false):
$('#myModal').modal({
show: false,
backdrop: true,
keyboard: false
});
但后来我宣布这个事件处理程序,这意味着,如果“事情”发生,我想键盘属性被设置为true。
$('#myModal').on('shown', function(e) {
if (something){
$('#myModal').modal({keyboard: true});
}
}
所以,当我走
$("#myModal").show();
事件处理程序没有做它应该,因为我没有得到关闭模式一旦退出键被按下。 但是我完全相信“东西”是真的,我已经检查并重新检查了$('#myModal').modal({keyboard: true})
执行。
任何线索,这是为什么不更新配置选项的值?
要更改已启动引导程序插件的配置设置,如莫代尔,你需要访问连接到该元素的插件对象,像$('#pluginElement').data['somePlugin']
然后设置options
在里面。
对于模态,您需要:
$('#myModal').data('modal').options.keyboard = true;
的jsfiddle演示(旧)
自举3(如在由@Gerald评论中提到),你需要bs.modal
:
$('#myModal').data('bs.modal').options.keyboard = true;
等待模态实例
有点超出OP的范围,但这是现在的两倍...我已经寻找相同的解决方案(我的记忆是废话),并两次,我碰到这个问题,这使我对我的最终答案出来。 我的问题是如何使已经init'ed和显示模式,这是“可关闭”,到“uncloseable”的模式。 在甚至其他用户需要这个答案罕见的,这里是基于公认的答案我做了什么:
* 使用bootstrap3
$('#modal').off('keyup.dismiss.bs.modal'); // disable escape key
$('#modal').data('bs.modal').options.backdrop = 'static';
$('#modal button.close').hide();
请注意,我并没有改变options.keyboard属性设置为false(其后通过调用逃生())如上建议。 我不能得到那个工作,所以找的引导源后,我看到所有它所做的是简单地删除了“keyup.dismiss.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();
});
这似乎完全是笨拙和意志为引导的未来版本一定突破,但工程现在...
干杯:)
对于bootstrap4
要禁用退出按钮关闭模式:
$('#myModal').off('keydown.dismiss.bs.modal');
要禁用点击背景关闭模式:
$('#myModal').data('bs.modal')._config.keyboard = false;
作为警告的夜间活动,这可能会在引导的未来版本打破。
你也可以在你的HTML标记添加属性: 数据键盘=“假”
<div id="myModal" class="modal hide fade" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"></div>
这个对我有用!
另一种选择,如果如果模式已经打开或没有,你需要配置模式选项(引导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
设置背景,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();