[javascript] 모달로 콘텐츠 다시로드 (twitter 부트 스트랩)
트위터 부트 스트랩의 모달 팝업을 사용하고 있습니다.
<div id="myModal" class="modal hide fade in">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Header</h3>
</div>
<div class="modal-body"></div>
<div class="modal-footer">
<input type="submit" class="btn btn-success" value="Save"/>
</div>
</div>
이 a 요소와 함께 ajax를 사용하여 콘텐츠를로드 할 수 있습니다.
<a data-toggle="modal" data-target="#myModal" href="edit.aspx">Open modal</a>
이제 동일한 모달을 열어야하지만 다른 URL을 사용해야합니다. 이 모달을 사용하여 데이터베이스에서 엔티티를 편집하고 있습니다. 따라서 엔티티에서 편집을 클릭하면 ID와 함께 모달을로드해야합니다.
<a data-toggle="modal" data-target="#myModal" href="edit.aspx?id=1">Open modal</a>
<a data-toggle="modal" data-target="#myModal" href="edit.aspx?id=2">Open modal</a>
<a data-toggle="modal" data-target="#myModal" href="edit.aspx?id=3">Open modal</a>
링크 번호 1을 클릭하면 정상적으로 작동합니다. 그러나 링크 번호 2를 클릭하면 모달 콘텐츠가 이미로드되어 링크 번호 1의 콘텐츠가 표시됩니다.
Twitter 부트 스트랩 모달 팝업에서 Ajax로드 된 콘텐츠를 새로 고치거나 재설정하려면 어떻게해야합니까?
답변
동일한 문제가 발생하고 있으며이 작업을 수행하는 방법은 data-toggle 특성을 제거하고 링크에 대한 사용자 지정 처리기를 사용하는 것입니다.
라인에있는 것 :
$("a[data-target=#myModal]").click(function(ev) {
ev.preventDefault();
var target = $(this).attr("href");
// load the url and show modal on success
$("#myModal .modal-body").load(target, function() {
$("#myModal").modal("show");
});
});
나중에 시도하고 댓글을 게시합니다.
답변
모달이 닫힐 때 데이터를 언로드하려면 Bootstrap 2.x와 함께 사용할 수 있습니다.
$('#myModal').on('hidden', function() {
$(this).removeData('modal');
});
그리고 부트 스트랩 3 ( https://github.com/twbs/bootstrap/pull/7935#issuecomment-18513516 ) :
$(document.body).on('hidden.bs.modal', function () {
$('#myModal').removeData('bs.modal')
});
//Edit SL: more universal
$(document).on('hidden.bs.modal', function (e) {
$(e.target).removeData('bs.modal');
});
답변
Modal 플러그인의 hide 메소드 끝에이 행을 추가하여 Modal이 팝업을 새로 고치도록 강제 할 수 있습니다 (bootstrap-transition.js v2.1.1을 사용하는 경우 836 행에 있어야합니다).
this.$element.removeData()
또는 이벤트 리스너
$('#modal').on('hidden', function() {
$(this).data('modal').$element.removeData();
})
답변
Bootstrap 3을 사용하면 ‘hidden.bs.modal’이벤트 핸들러를 사용하여 모달 관련 데이터를 삭제하여 다음에 팝업이 다시로드되도록 할 수 있습니다.
$('#modal').on('hidden.bs.modal', function() {
$(this).removeData('bs.modal');
});
답변
다른 답변을 바탕으로 (모두 감사합니다).
.html을 호출하면 전체 내용이 지워지고 모달은 내가 한 후에 어떤 내용으로도로드되지 않기 때문에 코드를 작동하도록 조정해야했습니다. 그래서 나는 단순히 모달의 내용 영역을 찾고 거기에 HTML 재설정을 적용했습니다.
$(document).on('hidden.bs.modal', function (e) {
var target = $(e.target);
target.removeData('bs.modal')
.find(".modal-content").html('');
});
컨트롤이 Bootstrap과 함께 있기 때문에 모달로드 직전에 추악한 점프가 발생하기 때문에 여전히 받아 들여지는 대답으로 갈 수 있습니다.
답변
위의 허용 된 예보다 약간 더 압축되었습니다. data-toggle = modal이 켜진 상태에서 현재 클릭 한 항목의 데이터 대상에서 대상을 가져옵니다. 이렇게하면 대상 모달의 ID가 무엇인지 알 필요가 없으며 동일한 것을 재사용 할 수 있습니다! 적은 코드 = 승리! 원하는 경우 모달의 제목, 레이블 및 버튼을로드하도록 수정할 수도 있습니다.
$("[data-toggle=modal]").click(function(ev) {
ev.preventDefault();
// load the url and show modal on success
$( $(this).attr('data-target') + " .modal-body").load($(this).attr("href"), function() {
$($(this).attr('data-target')).modal("show");
});
});
링크 예 :
<a data-toggle="modal" href="/page/api?package=herp" data-target="#modal">click me</a>
<a data-toggle="modal" href="/page/api?package=derp" data-target="#modal">click me2</a>
<a data-toggle="modal" href="/page/api?package=merp" data-target="#modal">click me3</a>
답변
Softlion 답변 을 약간 변경 했으므로 모든 모달이 숨길 때 새로 고쳐지지 않습니다. data-refresh = ‘true’속성이있는 모달은 새로 고쳐지고 다른 모달은 평소처럼 작동합니다. 다음은 수정 된 버전입니다.
$(document).on('hidden.bs.modal', function (e) {
if ($(e.target).attr('data-refresh') == 'true') {
// Remove modal data
$(e.target).removeData('bs.modal');
// Empty the HTML of modal
$(e.target).html('');
}
});
이제 아래와 같이 속성을 사용하십시오.
<div class="modal fade" data-refresh="true" id="#modal" tabindex="-1" role="dialog" aria-labelledby="#modal-label" aria-hidden="true"></div>
이렇게하면 data-refresh = ‘true’인 모달 만 새로 고쳐집니다. 그리고 새 값이로드 될 때까지 이전 값이 표시되기 때문에 모달 html을 재설정하여 html을 비어있는 상태로 수정합니다.