【发布时间】:2017-02-22 07:59:48
【问题描述】:
当我在页面上使用 JQuery Select2 时,它可以正常工作。但是,当它在引导框对话框模式中时,它不会正确显示。
这是我正在使用的 jquery 代码...
$.ajax({
type: 'GET',
url: src,
success: function (data) {
if (allowed) {
bootbox.dialog({
title: dialogTitle,
message: $('#altForm'),
onEscape: true,
show: false // We will show it manually later
}).on('shown.bs.modal', function () {
$('#enterBtn').hide();
$('#userPwd').hide();
$('.app-ctrl').prop('disabled', true);
$('#altForm').show();
}).on('hide.bs.modal', function (e) {
$('#altForm').hide().appendTo('body');
}).modal('show');
$('.boop').parents('.bootbox').removeAttr('tabindex');
$('.boop').select2();
}
}
});
我相信 Select2 下拉菜单的代码是有效的,因为当我注释掉初始化行时: $('.boop').select2();选择下拉列表变为常规下拉列表。但我不知道为什么它显示不正确。
【问题讨论】:
-
覆盖在模式上注册事件的enforceFocus()。 $.fn.modal.Constructor.prototype.enforceFocus = function() {};
-
此解决方案无效。但是,当我在表单中复制 .css 文件时,它起作用了!为什么这是必要的?
-
Select2 需要应用它的元素可见。您需要在
shown.bs.modal事件的处理程序中移动$('.boop').select2();(显示n,不显示 - 显示在模态变为可见之前处理)。 -
问题不是 $('.boop').select2();这在显示的.bs.modal 内部或外部都有效。真正的问题是无法“看到”select2 css 文件。当我将它包含在它们的形式中时,它就起作用了!我不知道为什么它无法从页面的 部分读取它。