工作示例:http://jsfiddle.net/byJy8/1/
代码:
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Panel</h3>
</div>
<div class="modal-body" style="max-height: 800px">
<form class="form-horizontal">
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="vdn_number">Numer</label>
<div class="controls">
<!-- seleect2 -->
<input name="vdn_number" type="hidden" id="vdn_number" class="input-large" required="" />
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary">Save changes</button>
</div>
</div>
和js:
$("#vdn_number").select2({
placeholder: "00000",
minimumInputLength: 2,
ajax: {
url: "getAjaxData/",
dataType: 'json',
type: "POST",
data: function (term, page) {
return {
q: term, // search term
col: 'vdn'
};
},
results: function (data) { // parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to alter remote JSON data
return {results: data};
}
}
});
答案:
在这里您可以找到快速修复
,这是“正确的方法”:将Select2嵌入引导模态时不起作用
#1 楼
好的,我已经可以使用了。(从模式中删除tabindex =“-1”)
评论
可能还有其他解决方案吗?因为模态窗口不会被Esc键关闭。
– woto
13-10-20在15:47
删除tabindex =“-1”对我不起作用。我刚刚将
更改为
–维森
13年11月27日在8:49
请选择pymarco答案作为正确答案,此解决方案会破坏ESC键,而他不会。不错的尝试。
–古怪
17年4月25日在10:11
@woto还有其他解决方案吗?我遇到了像你一样的问题。删除tabindex =“-1”后,我的模型没有在Esc键上关闭。
–ankit suthar
17年6月28日在9:26
删除taxindex有副作用吗?
–诺伯特·卡多斯(Norbert Kardos)
18年1月31日在14:45
–维森
13年11月27日在8:49
请选择pymarco答案作为正确答案,此解决方案会破坏ESC键,而他不会。不错的尝试。
–古怪
17年4月25日在10:11
@woto还有其他解决方案吗?我遇到了像你一样的问题。删除tabindex =“-1”后,我的模型没有在Esc键上关闭。
–ankit suthar
17年6月28日在9:26
删除taxindex有副作用吗?
–诺伯特·卡多斯(Norbert Kardos)
18年1月31日在14:45
#2 楼
对于Select2 v4:使用
dropdownParent
将下拉列表附加到模式对话框,而不是HTML正文。 <!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
<select id="select2insidemodal" multiple="multiple">
<option value="AL">Alabama</option>
...
<option value="WY">Wyoming</option>
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$("#select2insidemodal").select2({
dropdownParent: $("#myModal")
});
});
</script>
这将附加Select2下拉列表,使其位于模式的DOM内,而不是HTML主体(默认值)内。参见https://select2.org/dropdown#dropdown-placement
评论
这对我有效(使用v4.0.2),但是我必须使用dropdownParent:$(“#myModal”),而不是dropdownParent:“ #myModal”。
– Saxon Druce
16年4月12日在7:58
@Kevin Brown:由于dropdownParent:启用使用v4.0.1版本的模式输入时,仍需要$(“#myModal”)来更新您的帖子;我刚刚进行了测试。您可以还原您的更新,以使@dboswell的答案仍然有意义和有意义。
– nyedidikeke
16年8月29日在17:07
@nyed我所做的唯一编辑是我强制dropdownParent使用jQuery对象。该更新已经存在,并且我无法对其进行验证。
–凯文·布朗
16年8月29日在17:09
FWIW,在我的情况下,我需要将dropdownParent设置为模态的主体,将其附加到模态本身并不能使z索引足够高。例如dropdownParent:$('。modal-body','#myModal')
–DrewInTheMountains
17年12月14日在18:03
@DrewInTheMountains我在将dropdownParent设置为模态的根时也遇到了问题,选择主体确实更好,否则滚动时会遇到严重的定位错误。我将我的类设置为div,其类为modal-content,它的工作方式就像一个魅力!
– Shahin Dohan
18年11月4日在1:47
#3 楼
我在github上为select2找到了一个解决方案https://github.com/ivaynberg/select2/issues/1436
对于引导程序3,解决方案是:
$.fn.modal.Constructor.prototype.enforceFocus = function() {};
Bootstrap 4将
enforceFocus
方法重命名为_enforceFocus
,因此您需要对其进行修补:$.fn.modal.Constructor.prototype._enforceFocus = function() {};
从上面的链接复制的说明:
Bootstrap将侦听器注册到focusin事件它检查聚焦的元素是叠加层本身还是它的后代-如果不是,则只是将焦点重新放在叠加层上。通过将select2下拉列表附加到主体,这可以有效地防止您在文本字段中输入任何内容。
您可以通过覆盖将事件注册到模式上的forceFocus函数来快速修复此问题
评论
我刚刚解决了在Bootstrap 2.3.2模态窗口中使用CKEditor的问题。这个函数被称为很多,因此,如果您修改if语句,则必须非常小心,不要使浏览器崩溃。我建议在现有if中放置任何附加子句-不要在if后面附加它们。 (例如,如果(现有条件){如果(您的条件){希望有所帮助。
–JonRed
13-10-25在3:34
该代码放在哪里,应该处理什么功能?抱歉,这里的JS菜鸟,我尝试将其作为select2 JS的一部分,或将其放在页面的顶部/结尾,但均未成功。 $ .fn.modal.Constructor.prototype.enforceFocus = $ .noop;
– Armitage2k
16-11-27在0:59
如果您将data-focus =“ false”设置为模式(
)_enforceFocus永远不会为此模式调用。在Bootstrap 4.1.3中进行了测试并成功运行...原始答案github.com/twbs/bootstrap/issues/19971#issuecomment-275901368
– Ashokbharathi
19年1月3日在8:13
– Ashokbharathi
19年1月3日在8:13
#4 楼
只需删除tabindex="-1"
并添加样式overflow:hidden
这里是一个示例:
<div id="myModal" class="modal fade" role="dialog" style="overflow:hidden;">
<!---content modal here -->
</div>
评论
它有效,但是当我有很长的模态时,我不能向下滚动!
–塔雷克·卡拉吉(Tarek Kalaji)
18年3月17日在16:40
试图删除tabindex但还不够。添加溢出:如果模式框很长,则隐藏很有用...
–安慰剂
Apt 2 '18 at 11:17
为我工作,删除标签索引属性。
– Glen
18年6月4日在11:25
仅供参考:删除tab-index attr将删除通过esc按钮关闭模式弹出窗口的功能。
–好奇男孩
18年7月28日在7:10
如果您使用的是yii2引导程序模式,请使用选项设置:'options'=> ['tabindex'=> false,“ style” =>“ overflow:hidden;”],
– Opad
18-10-13在17:12
#5 楼
.select2-close-mask{
z-index: 2099;
}
.select2-dropdown{
z-index: 3051;
}
这是我对select2 4.0.0的解决方案。只需覆盖select2.css导入下方的CSS。
请确保z-index大于对话框或模态。我只是在默认值上加上2000。因为我的对话框的z-index大约为1000。
评论
除此之外,所有解决方案都不适用于select2 4.0.0。非常感谢。
– Neel
15年6月26日在10:15
如果Select2(v4.0.0)位于弹出窗口中,则会发生相同的问题。在bootstrap.css中,.popover的z索引设置为1060,因此此修复程序也可以正常使用。我喜欢它,因为它很简单,并且可以用创建问题的方式解决问题:在样式表中设置z-index。
– Paul
15年7月2日在18:02
我已经在css文件中添加了以上内容,但没有任何更改。我正在使用jQuery Mobile。有什么建议吗?
– Sahil Khanna
16-2-20在7:03
@Sahil 1.确保已成功覆盖原始文件。简单的方法是将其添加到所有默认的CSS文件之后2.检查z-index,确保其大于对话框的
–迪鲁卡W
16-2-22在8:55
从模式中删除tabindex =“-1”以使此解决方案有效。
– RenanStr
19-10-17在13:50
#6 楼
设置dropdownParent。我必须将其设置为模态内的.modal-content,否则文本最终会居中。$("#product_id").select2({
dropdownParent: $('#myModal .modal-content')
});
评论
.modal-content确实有所作为。感谢您指出👍
–林俊杰
19年4月18日在4:10
#7 楼
在这里找到对我有用的答案:https://github.com/select2/select2-bootstrap-theme/issues/41$('select').select2({
dropdownParent: $('#my_amazing_modal')
});
也不需要删除
tabindex
。#8 楼
我有同样的问题,将z-index
更新为.select2-container
应该可以解决问题。确保模态的z-index
低于select2的模态。.select2-container {
z-index: 99999;
}
更新: @breq建议
评论
您需要使用@breq答案来实现这一点,以使其起作用。
– Ryan Arief
17年6月11日在3:40
#9 楼
根据官方的select2文档,发生此问题的原因是Bootstrap模态倾向于将焦点从模态之外的其他元素中窃取。模态”。而是使用dropdownParent设置将下拉列表附加到模态本身: org / troubleshooting / common-problems
评论
好。在添加dropdownParent选项后,它无法正常工作,现在还不能正常工作。
– Yogesh Saroya
19年11月18日在14:44
#10 楼
Jus在Document.read()$.fn.modal.Constructor.prototype.enforceFocus = function () {};
上使用此代码
评论
正确的函数名称为“ $(document).ready”。因此代码应类似于:$(document).ready(function(){$ .fn.modal.Constructor.prototype.enforceFocus = function(){};});
–莱希·奥辛斯基(LechOsiński)
17年11月2日14:04
@LechOsiński-感谢您实际描述了如何使用这一小段代码。您的解决方案是唯一对我有用的解决方案。 +1
– Francis Bartkowiak
18-10-18在0:50
#11 楼
此问题解决了为我工作的单个Jquery函数$('#myModal .select2').each(function() {
var $p = $(this).parent();
$(this).select2({
dropdownParent: $p
});
});
#12 楼
更改select2.css文件评论
那是我唯一的作品(jquery-ui-1.10.3.css,jquery-ui-1.9.1.js和select2 3.4.0)。我有2个jquery UI对话框,一个在另一个之上,而select2在第二个之上。我还把//允许SELECT2,日期和时间选择器的交互作用放在jQuery UI对话框$ .ui.dialog.prototype._allowInteraction = function(e){return !! $(e.target).closest('。ui-对话框,.ui-datepicker,.select2-drop')。length; };我不知道是否有帮助。
– Adrian P.
16-2-9在17:29
#13 楼
只是为了更好地理解tabindex元素如何工作以完成已接受的答案:顺序键盘导航,如果可以的话,在什么位置。它可以采用多个值:-负值表示元素应该是可聚焦的,但不能通过顺序键盘导航到达;
-0表示元素应该是可聚焦的并且可通过顺序键盘导航达到,但其相对顺序由平台约定定义;它的相对顺序由属性的值定义:依次跟随tabindex的数量递增。如果多个元素共享相同的tabindex,则它们的相对顺序将遵循它们在文档中的相对位置。
来自:Mozilla Devlopper Network
#14 楼
就我而言,我有两个模态的相同问题,所有问题都使用以下方法解决:$('.select2').each(function() {
$(this).select2({ dropdownParent: $(this).parent()});
})
与项目问题#41中的用户说的一样。
#15 楼
如果您的iPad键盘有问题,请在单击select2输入时隐藏引导程序模式,则可以通过在select2
输入初始化后添加以下规则来解决此问题: > 来自https://github.com/angular-ui/bootstrap/issues/1812#issuecomment-135119475
编辑:如果未正确显示您的选项,则需要使用初始化
dropdownParent
时的select2
属性:if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
var styleEl = document.createElement('style'), styleSheet;
document.head.appendChild(styleEl);
styleSheet = styleEl.sheet;
styleSheet.insertRule(".modal { position:absolute; bottom:auto; }", 0);
document.body.scrollTop = 0; // Only for Safari
}
祝你好运(:
#16 楼
基于@pymarco的答案,我写了这个解决方案,虽然不是完美的解决方案,但解决了select2焦点问题并保持制表符序列在模式内部工作#17 楼
$("#IlceId").select2({
allowClear: true,
multiple: false,
dropdownParent: $("#IlceId").parent(),
escapeMarkup: function (m) {
return m;
},
});
该代码有效。谢谢。
#18 楼
好吧,我知道我迟到了。但是,请允许我与您分享对我有用的方法。在select2网站上。#19 楼
如果使用jquery移动弹出窗口,则必须重写_handleDocumentFocusIn函数: $.mobile.popup.prototype._handleDocumentFocusIn = function(e) {
if ($(e.target).closest('.select2-dropdown').length) return true;
}
评论
我正在使用jQuery Mobile,并在弹出窗口中嵌入了Select2。您提供的代码在PC浏览器上效果很好。但是,当我在移动浏览器上运行此代码时,选择任何值时,弹出窗口都会关闭并重新打开。您能提出我需要做的任何更改吗?
– Sahil Khanna
16-2-20在7:03
#20 楼
我在select2
中使用bootstrap modal
遇到相同的问题,解决方法是删除overflow-y: auto;
和overflow: hidden
;来自.modal-open
和.modal classes
的下面是使用
jQuery
删除overflow-y
的示例:$('.modal').css('overflow-y','visible');
$('.modal').css('overflow','visible');
#21 楼
我以前有这个问题,我正在使用yii2并以这种方式解决了$.fn.modal.Constructor.prototype.enforceFocus = $.noop;
#22 楼
我在应用程序中遇到一个半相关的问题,所以我将其放在2c中。我有多个带有包含select2小部件的表单的模态。打开模式A,然后打开模式A内的另一个模式,将导致模式B内的select2小部件消失并且无法初始化。
这些模态中的每一个都是通过ajax加载表格的。
解决方案是在关闭模态时从dom中删除表格。
$(document).on('hidden.bs.modal', '.modal', function(e) {
// make sure we don't leave any select2 widgets around
$(this).find('.my-form').remove();
});
#23 楼
$('.modal').on('shown.bs.modal', function (e) {
$(this).find('.select2me').select2({
dropdownParent: $(this).find('.modal-content')
});
})
#24 楼
我在我的项目中通过重载select2
-function解决了这一问题。现在,它将检查是否没有dropdownParent,以及是否在具有div.modal
类型的父元素的元素上调用该函数。如果是这样,它将在下拉菜单中将该模式添加为父模式。 br /> (function(){
var oldSelect2 = jQuery.fn.select2;
jQuery.fn.select2 = function() {
const modalParent = jQuery(this).parents('div.modal').first();
if (arguments.length === 0 && modalParent.length > 0) {
arguments = [{dropdownParent: modalParent}];
} else if (arguments.length === 1
&& typeof arguments[0] === 'object'
&& typeof arguments[0].dropdownParent === 'undefined'
&& modalParent.length > 0) {
arguments[0].dropdownParent = modalParent;
}
return oldSelect2.apply(this,arguments);
};
// Copy all properties of the old function to the new
for (var key in oldSelect2) {
jQuery.fn.select2[key] = oldSelect2[key];
}
})();
#25 楼
您可以在$(document)内部再次调用select2触发器。$(".select2").select2({
width: '120'
});
#26 楼
要在服务器端(ajax或json数据内联)中使用bootstrap 4.0,您需要添加以下所有内容:select2:
$.fn.modal.Constructor.prototype._enforceFocus = function() {};
评论
您可以在模式html代码上指定data-focus =“ false”属性,而不是全局禁用引导程序模式的焦点功能。 https://getbootstrap.com/docs/4.5/components/modal/#options
–itsyub
20年8月11日在19:29
除此答案外,没有其他答案对我有用,如果您手动打开模态,则此答案是可行的
–VeRJiL
20-11-29在23:13
#27 楼
我只是通过包含select2.min.css尝试一下来实现它。
我的引导程序3的模式html是
<div id="changeTransportUserRequestPopup" class="modal fade" role="dialog">
<div class="modal-dialog" style="width: 40%!important; ">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>Warning</h3>
</div>
<div class="modal-body" id="changeTransportUserRequestPopupBody">
<select id="cbTransport" class="js-example-basic-single" name="cbTransport" style="width:100%!important;"></select>
</div>
<div class="modal-footer">
<button id="noPost" class="btn btn-default" name="postConfirm" value="false" data-dismiss="modal">Cancel</button>
<button type="submit" id="yesChangeTransportPost" class="btn btn-success" name="yesChangeTransportPost" value="true" data-dismiss="modal">Yes</button>
</div>
</div>
</div>
</div>
#28 楼
我遇到了类似的问题,并使用 $('#CompId').select2({
dropdownParent: $('#AssetsModal')
});
和使用select的模态进行了修复,但我不知道为什么选择菜单比其他字段小
,开始使用select2时,它的启动就这样。当我删除它时,一切都很好。
有没有人可以分享一些有关此的经验。
#29 楼
如果您使用stisla
并使用firemodal:$('#modal-create-promo').click(()=>{
setTimeout(()=>{
$('#fire-modal-1').removeAttr('tabindex');
});
});
$("#modal-create-promo").fireModal({
...
});
对我来说是工作
#30 楼
就我而言,我做到了,而且行得通。我使用捆绑软件加载它,在这种情况下,它对我有用 $(document).on('select2:select', '#Id_Producto', function (evt) {
// Here your code...
});
评论
也就是说,从元素中删除属性tabindex =“-1”。dboswell的答案是正确的解决方案,但是,dropdownParent不应位于根div上,而应位于更深的位置,例如具有modal-content类的div,否则滚动模态时下拉位置会变得混乱。