부트 스트랩 모달에서 select2 (입력)를 사용하면 아무것도 입력 할 수 없습니다. 장애인처럼? 모달 외부에서 select2가 정상적으로 작동합니다.
실례 : 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가 작동하지 않습니다
답변
좋아, 나는 그것을 작동시켰다.
변화
<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">
에
<div id="myModal" class="modal hide fade" 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">
( 모달에서 tabindex = “-1” 제거 )
답변
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 드롭 다운이 첨부되어 HTML 본문이 아닌 모달의 DOM에 속합니다 (기본값). https://select2.org/dropdown#dropdown-placement를 참조 하십시오.
답변
select2의 github에서 이에 대한 해결책을 찾았습니다.
https://github.com/ivaynberg/select2/issues/1436
부트 스트랩 3의 경우 해결책은 다음과 같습니다.
$.fn.modal.Constructor.prototype.enforceFocus = function() {};
Bootstrap 4의 enforceFocus
메소드 이름이로 바뀌 었 _enforceFocus
으므로 대신 패치해야합니다.
$.fn.modal.Constructor.prototype._enforceFocus = function() {};
위 링크에서 설명이 복사되었습니다.
부트 스트랩은 포커스 된 요소가 오버레이 자체인지 또는 하위 요소인지 여부를 확인하는 포커스 인 이벤트에 리스너를 등록합니다. select2 드롭 다운이 본문에 첨부되면 텍스트 필드에 아무것도 입력하지 못하게됩니다.
모달에 이벤트를 등록하는 enforceFocus 함수를 덮어 써서이를 신속하게 수정할 수 있습니다
답변
그냥 tabindex="-1"
스타일을 제거 하고 추가하십시오overflow:hidden
예를 들면 다음과 같습니다.
<div id="myModal" class="modal fade" role="dialog" style="overflow:hidden;">
<!---content modal here -->
</div>
답변
.select2-close-mask{
z-index: 2099;
}
.select2-dropdown{
z-index: 3051;
}
이것은 select2 4.0.0을 사용하는 솔루션입니다. select2.css 가져 오기 바로 아래의 CSS를 대체하십시오. z- 색인이 대화 상자 나 모달보다 큰지 확인하십시오. 기본 설정에 2000을 추가합니다. 내 대화 상자의 z-index가 약 1000입니다.
답변
dropdownParent를 설정하십시오. 모달 내의 .modal-content에 설정해야했습니다. 그렇지 않으면 텍스트가 가운데에 배치됩니다.
$("#product_id").select2({
dropdownParent: $('#myModal .modal-content')
});
답변
나를 위해 일한 답변은 여기에 있습니다 : https://github.com/select2/select2-bootstrap-theme/issues/41
$('select').select2({
dropdownParent: $('#my_amazing_modal')
});
또한을 제거 할 필요가 없습니다 tabindex
.