更改引导模式的选择,一旦它已经存在(Change Bootstrap modal option on

2019-06-26 17:51发布

我使用的引导模态 。 我宣布,我称呼它,我表现出来......一切都似乎是确定。

但是,如果我以前使用“键盘”属性设置为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})执行。

任何线索,这是为什么不更新配置选项的值?

Answer 1:

要更改已启动引导程序插件的配置设置,如莫代尔,你需要访问连接到该元素的插件对象,像$('#pluginElement').data['somePlugin']然后设置options在里面。

对于模态,您需要:

$('#myModal').data('modal').options.keyboard = true;

的jsfiddle演示(旧)


自举3(如在由@Gerald评论中提到),你需要bs.modal

$('#myModal').data('bs.modal').options.keyboard = true;

等待模态实例



Answer 2:

有点超出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();
});

这似乎完全是笨拙和意志为引导的未来版本一定突破,但工程现在...

干杯:)



Answer 3:

对于bootstrap4

要禁用退出按钮关闭模式:

$('#myModal').off('keydown.dismiss.bs.modal');

要禁用点击背景关闭模式:

$('#myModal').data('bs.modal')._config.keyboard = false;

作为警告的夜间活动,这可能会在引导的未来版本打破。



Answer 4:

你也可以在你的HTML标记添加属性: 数据键盘=“假”

<div id="myModal" class="modal hide fade" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"></div>

这个对我有用!



Answer 5:

另一种选择,如果如果模式已经打开或没有,你需要配置模式选项(引导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



Answer 6:

设置背景,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();


文章来源: Change Bootstrap modal option once it already exists