Twitter Bootstrap Modal에 함수 바인딩 닫기


530

새 프로젝트에서 Twitter Bootstrap lib를 사용하고 있으며 페이지의 일부를 모달 닫기에서 최신 json 데이터를 새로 고치고 검색하려고합니다. 나는 누군가가 그것을 지적하거나 해결책을 제안 할 수있는 문서의 어느 곳에서도 이것을 보지 못한다.

문서화 된 방법을 사용할 때의 두 가지 문제

 $('#my-modal').bind('hide', function () {
   // do something ...
 });

모달에 "숨기기"클래스를 이미 첨부하여 페이지로드시 표시되지 않으므로 두 번로드됩니다.

숨기기 클래스를 제거하고 요소 ID를 설정하고 닫기를 칠 때 위의 함수에 display:none추가 console.log("THE MODAL CLOSED");해도 아무 일도 일어나지 않습니다.

답변:


1137

부트 스트랩 3 & 4

$('#myModal').on('hidden.bs.modal', function () {
    // do something…
});

부트 스트랩 3 : getbootstrap.com/javascript/#modals-events

부트 스트랩 4 : getbootstrap.com/docs/4.1/components/modal/#events

부트 스트랩 2.3.2

$('#myModal').on('hidden', function () {
    // do something…
});

getbootstrap.com/2.3.2/javascript.html#modals → 이벤트를 참조하십시오


1
이것은 모달 바닥 글의 버튼 위로 마우스를 가져 가면 발사되는 이유를 제외하고는 효과가있는 것 같습니다. 버튼은 일반 제출 버튼입니다. <input type = "submit"class = "btn btn-info"value = "Go"/> 마우스를 가리킬 때 숨기기 이벤트가 발생하지 않는 방법에 대한 아이디어가 있습니까? 또는 호버로 인해 해고되었음을 어떻게 알 수 있습니까? BTW : 이벤트가 시작 되더라도 모달 대화 상자가 닫히지 않습니다.
가이

2
Bootstrap 3 에서이 동작을 보지 못했습니다. 바이올린을 만들 수 있습니까?
sp00n

7
이 답변은 아마도 hidden.bs.modal과 hide.bs.modal의 차이점을 언급해야합니다. CSS 애니메이션이 완료되면 숨겨진 기능이 실행되지만 애니메이션이없는 경우 테스트에서 실행되지 않습니다 (버그 일 수 있음). 데이터 관리 작업을하는 경우 hide.bs.modal을 사용하는 것이 안전 할 수 있습니다. hide.bs.modal은 .modal ( 'hide')가 호출되는 즉시 시작됩니다. getbootstrap.com/javascript/#modals-usage- 이벤트 하위 섹션을 참조하십시오.
Evan Steinkerchner

2
부트 스트랩 3 : data-dismiss="modal"(닫기 버튼과 같은) 로 표시된 모달 태그를 클릭하면 작동 하지만 모달을 둘러싼 검은 배경 영역을 클릭하면 작동하지 않습니다 . 모달이 닫히지 만 페이지를 새로 고칠 때까지 다시 열 수 없습니다. 난 둘 다 해봤 'hidden.bs.modal'하고 'hide.bs.modal'아무 소용.
marquito

5
@ marquito 당신이 할 수있는 일 (내가하는 일)은 다음과 같이 사용합니다 : $('#myModal').modal({ backdrop: 'static', keyboard: false });그렇게하면 회색 영역을 클릭하거나 Esc 키를 누를 때 모달이 닫히지 않습니다.
aesede

123

부트 스트랩 4

$('#my-modal').on('hidden.bs.modal', function () {
  window.alert('hidden event fired!');
});

실제 예제는이 JSFiddle을 참조하십시오.

https://jsfiddle.net/6n7bg2c9/

여기 문서의 모달 이벤트 섹션을 참조하십시오.

https://getbootstrap.com/docs/4.3/components/modal/#events


1
이 유형의 콜백을 구현하려는이 게시물을 찾는 사람에게는이 기능과 대화 상자 / 경고 / 확인을 동적으로 생성하는 데 도움이되는 많은 다른 기능을 포함하는 Bootstrap 확장 모듈이 있습니다. bootboxjs.com
jkriddle

아래 @Ricardo 리마의 반응은 이제 jQuery를에 / 부트 스트랩 이벤트를 모니터링하기위한 올바른 방법입니다
sbonami

@meatballs는 여전히 예제를 사용하여 투표를합니다. 비록 bind는 더 이상 사용되지 않습니다.
Stephen Patten

@ 100acrewood Dude, 이제 그 발견입니다! 감사합니다! re : bootboxjs.com
Stephen Patten

46

부트 스트랩 3을 시작 하면 ( 편집 : 부트 스트랩 4 에서도 동일 ) 이벤트를 발생시킬 수있는 두 가지 인스턴스가 있습니다.

1. 모달 "숨기기"이벤트가 시작될 때

$('#myModal').on('hide.bs.modal', function () { 
    console.log('Fired at start of hide event!');
});  

2. 모달 "숨기기"이벤트가 완료되면

$('#myModal').on('hidden.bs.modal', function () {
    console.log('Fired when hide event has finished!');
});

참조 : http://getbootstrap.com/javascript/#js-events


1
이것은 모달이 닫힐 때 몸에 15px의 패딩을 추가하는 Bootstrap 모달 버그를 수정하는 데 도움이되었습니다. 감사!
Sam Malayek

2
2 개의 이벤트를 표시하는 데 좋습니다. 저와 같은 초보자는 이벤트가 시작되도록 모달 아래에 배치해야한다는 점에 유의하십시오.
Lynnell Emmanuel Neri

18

"실시간"대신 "on"이벤트를 사용해야하지만 문서 개체에 할당해야합니다.

사용하다:

$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});

1
모달이 동적으로 추가되는 경우이를 수행해야합니다. 많은 시간을 절약했습니다.
Dylan Vander Berg

15
$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});

6

부트 스트랩 은 모달이 사용자로부터 숨겨 졌을 때 이벤트 를 시작하려는 경우와 같이 모달에 연결할 수있는 이벤트를 제공합니다. hidden.bs.modal 이벤트는 다음과 같이사용할 수 있습니다

    /* hidden.bs.modal event example */
    $('#myModal').on('hidden.bs.modal', function () {
          window.alert('hidden event fired!');
    })

작동 확인 바이올린 여기 에 여기에 모달 방법 및 이벤트에 대한 자세한 읽어 문서


4

부트 스트랩 4 :

$('#myModal').on('hidden.bs.modal', function (e) {
   // call your method
})

hide.bs.modal :이 이벤트는 hide 인스턴스 메소드가 호출되면 즉시 시작됩니다.

hidden.bs.modal :이 이벤트는 모달이 사용자에게 숨겨지면 발생합니다 (CSS 전환이 완료 될 때까지 기다립니다).


이 방법은 BS3에도 유효합니다. BS2 (더 이상 사용되지 않음) 방법에 대한 허용 된 답변을 참조하십시오.
Roland 15

3

나는 이렇게 할 것입니다 :

$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });

나머지는 이미 다른 사람들에 의해 작성되었습니다. 또한 jquery-on method 문서를 읽는 것이 좋습니다.


2

hide.bs.modal모달이 닫힐 때 트리거되는 부트 스트랩 이벤트와 관련하여 많은 답변을 보았습니다 .

해당 이벤트에 문제가 있습니다. 모달의 팝업 (팝 오버, 툴팁 등)이 해당 이벤트를 트리거합니다.

모달이 닫힐 때 이벤트를 잡는 다른 방법이 있습니다.

$(document).on('hidden','#modal:not(.in)', function(){} );

부트 스트랩은 in모달이 열려있을 때 클래스를 사용합니다 . 이벤트 가 트리거 될 때 hidden클래스 in가 계속 정의 되므로 이벤트 를 사용하는 것이 매우 중요합니다 hide.

IE8은 Jquery :not()선택기를 지원하지 않으므로이 솔루션은 IE8에서 작동하지 않습니다 .


2

나는 일부와 같은 문제가 있었다

$('#myModal').on('hidden.bs.modal', function () {
// do something… })

이를 페이지 하단에 배치해야하며 상단에 배치하면 이벤트가 발생하지 않습니다.


과연. 이벤트를 시작하려면 모달 아래에 배치해야한다고 언급 한 것이 좋습니다.
Lynnell Emmanuel Neri

규칙보다 약간 더 엄격하게 정의하겠습니다. jQuery 선택기 $("#myModal")가 호출되면 ID가 ID 인 HTML 요소가 myModalDOM에 존재해야합니다. 따라서이 코드를 페이지 상단에 있지만 $(document).on("ready", function(){ ... });DOM에 요소가 채워진 후에 호출되는 비슷한 함수 내에 배치 할 수 있습니다 .
Andy Gee

0

모든 모달 닫기에서 함수를 시작하려면이 방법을 사용할 수 있습니다.

$(document).ready(function (){
    $('.modal').each(function (){
        $(this).on('hidden.bs.modal', function () {
            //fires when evey popup close. Ex. resetModal();
        });
    });
});

따라서 매번 모달 ID를 지정할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.