부트 스트랩 jquery show.bs.modal 이벤트가 발생하지 않습니다.


82

부트 스트랩 3 문서의 모달 예제를 사용하고 있습니다. 모달이 작동합니다. 그러나 나는 그것이 실행될 때 show.bs.modal 이벤트에 액세스해야합니다. 지금은 시도하고 있습니다.

$('#myModal').on('show.bs.modal', function () {
   alert('hi')
})

아무 일도 일어나지 않고 이벤트가 발생하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까??? 이것은 나에게 의미가 없습니다.

답변:


102

이것을 사용하십시오 :

$(document).on('show.bs.modal','#myModal', function () {
  alert('hi');
})

8
이것은 내 문제를 해결했습니다. 하지만 document.ready 함수 외부에 배치했습니다. document.ready 내에 배치했을 때 작동하지 않았습니다. 누군가를 도울 수 있습니다.
Harish Chinju

2
.NET을 통해 동적으로 생성 된 ajax 모달과 완벽하게 작동하므로 이것은 허용되는 대답이어야합니다 $(data).modal('show');.
kjdion84

2
이것은 문서에있는 각 모달에 대해 실행됩니다. 특정 모달 만 대상으로하려면 $(document).on('hidden.bs.modal', function (e) { if (e.target.id === 'my-modal-id') { alert('hi'); } });. 여기에서 이드가 온다<div class="modal fade" id="my-modal-id">
przno

2
@przno 아니요, 두 번째 인수는 요소를 지정하는 선택자입니다.
Tom

사용할 때 $(document).on(...리스너를 문서 컨텍스트에 연결하고 대상 요소가 존재하는지 여부에 관계없이. 이벤트 이름을 첫 번째 인수로 추가하고 콜백 팬션을 마지막으로 추가해야하지만 쿼리 선택기를 두 번째 인수로 추가 할 수 있습니다
Ali

81

on('shown.bs.modal')팝업에 모달을 인스턴스화하기 전에 넣어야합니다.

$("#myModal").on("shown.bs.modal", function () { 
    alert('Hi');
});
$("#myModal").modal('show'); //This can also be $("#myModal").modal({ show: true });

또는

$("#myModal").on("shown.bs.modal", function () { 
    alert('Hi');
}).modal('show');

필드에 초점을 맞추려면 shown.bs.modal대신를 사용하는 것이 좋지만 show.bs.modal다른 이유로 배경을 숨기거나 모달이 표시되기 직전에 무언가를 설정하려면 show.bs.modal함수를 사용하십시오 .


@ kjdion84-생성하는 곳에서 이벤트를 바인딩해야합니다. `var amodal = $ ( "<div modal ... />"); amodal.on (..., myfunc) .modal ( 'show');
Pierre

을 사용하면 이벤트를 바인딩 할 필요가 없습니다 $(document).on().
kjdion84

2
^ 이것은 내 문제를 해결합니다. 또한, show.bs.modal다른 shown.bs.modal. 모달이 표시 되려고 할 때 전자가 실행됩니다. 표시되었을 때 후자. 크게 다릅니다.
Yukio Fukuzawa

@Pierre의 의미는 show.bs.modal무엇입니까?
KUMAR

@KUMAR을 호출 할 때 부트 스트랩이 호출하는 이벤트입니다 .modal('show'). 이 조동사 요구 네 개의 이벤트가 있습니다 : [ show.bs.modal, shown.bs.modal, hide.bs.modal, hidden.bs.modal] - 쇼 보여주는 경우, 표시 숨기기 위해 같은 숨겨진 보여줄 것입니다 때입니다. getbootstrap.com/docs/3.4/javascript/#modals-events
Pierre

18

함수를 $(document).ready(function() {, 또는 더 간단하게 $(function() {. CoffeeScript에서는 다음과 같습니다.

$ ->
  $('#myModal').on 'show.bs.modal', (event)->

이것이 없으면 JavaScript는 문서가로드되기 전에 실행되며 #myModal아직 DOM의 일부가 아닙니다. 다음은 Bootstrap 참조 입니다.


12
$(document).on('shown.bs.modal','.modal', function () {

/// TODO EVENTS

});

2
어떻게 든 이것이 나에게 가장 도움이되는 대답이었습니다. .modal모달 ID를 참조하는 대신 작업하는 것이 해결책 인 것 같습니다. 감사합니다!
mabu

이것은 비특이적이며 설정된 모달이 트리거 될 때가 아니라 표시되는 모든 모달에서 트리거되기 때문에 가장 좋은 대답입니다.
IDED

9

이 시도

$('#myModal').on('shown.bs.modal', function () {
   alert('hi');
});

shown대신 사용하면 show함수 및 경고 끝에 세미 콜론이 있는지 확인하십시오.


7
'show.bs.modal'과 'shown.bs.modal'은 모두 내 목적에 맞게 작동해야하며 둘 다 부트 스트랩 문서에 유효한 이벤트로 나열됩니다. 여전히 작동하지 않습니다.
m4rlo

1
jQuery가 작동하는지 확인 했습니까? 예 : $ (document) .ready (function () {alert ( 'test');});
Trevor

예, document.ready 내에서 show 이벤트 외부에 경고를 넣으면 실행됩니다.
m4rlo

1
@BassJobsen 그는 자신의 html에서 application.js를 두 번 참조하고 있으며 그중 하나는 올바른 파일을로드하고 있습니다. 다른 하나는 찾을 수 없습니다. 문제가 발생합니까?
Trevor

1
감사합니다 @ Trevor. 그것은 나에게도 효과적이었습니다. 2 개의 jquery.js를 포함했습니다. - P
하기 Akshay Vishnoi

7

이거 추가 해봐:

$(document).ready(function(){
    $(document).on('shown.bs.modal','.modal', function () {
         // DO EVENTS
    });
});

6

비슷한 일이 나에게 일어 났고 setTimeout을 사용하여 해결했습니다.

부트 스트랩은 다음 시간 제한을 사용하여 표시를 완료합니다.

c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150,

따라서 300 개 이상을 사용하면 작동해야하며 200은 작동합니다.

$('#myModal').on('show.bs.modal', function (e) {
    setTimeout(function(){
        //Do something if necessary
    }, 300);                        
})

1
이것이 제가 찾고 있던 것입니다! 부트 스트랩의 전환 기간을 알려 주셔서 감사합니다!
좋아요

4

제 경우에는 .modal-dialog div가 누락되었습니다.

이벤트를 실행하지 않음 : shown.bs.modal

<div id="loadingModal" class="modal fade">
  <p>Loading...</p>
</div>

이벤트를 실행합니까 : shown.bs.modal

<div id="loadingModal" class="modal fade">
  <div class="modal-dialog">      
    <p>Loading...</p>
  </div>
</div>

3

비슷하지만 다른 문제가 있었고 $ ( '# myModal')을 사용할 때 여전히 작동하지 않습니다. $ (window)를 사용할 때 작동하도록 할 수있었습니다.

내 다른 문제는 내 모달 div html 콘텐츠를 javascript 변수에 저장하면 show 이벤트가 발생하지 않는다는 것입니다.

var content="<div id='myModal' ...";
$(content).modal();
$(window).on('show.bs.modal', function (e) {
  alert('show test');
});

이벤트가 발생하지 않았기 때문에 실행되지 않았습니다.

내 수정은 html 본문에 div를 포함하는 것이 었습니다.

<body>
    <div id='myModal'>
       ...
    </div>
    <script>
        $('#myModal).modal();
        $(window).on('show.bs.modal', function (e) {
            alert('show test');
        });
    </script>
</body>


2

Bootstrap을 사용하기 전에 jQuery를로드하고 있는지 확인하십시오. 기본적으로 들리지만 이러한 모달 이벤트를 포착하는 데 문제가 있었고 오류가 내 코드가 아니라 jQuery 이전에 부트 스트랩을로드하는 것으로 나타났습니다.


2

다음과 같은 경우에는 작동하지 않는 경우가 있습니다.

1) 당신은 당신의 줄 앞에 자바 스크립트 코드에 오류가 $('#myModal').on('show.bs.modal'...)있습니다. 문제를 해결하려면 줄 앞에 경고 메시지를 넣어 페이지를로드 할 때 나타나는지 확인하십시오. 위의 JS를 제거하여 어느 것이 문제인지 확인하려면

2) 또 다른 문제는 JS를 잘못된 순서로로드하는 경우입니다. 예를 들어 $('#myModal').on('show.bs.modal'...)실제로 JQuery.js를로드하기 전에 파트를 가질 수 있습니다 . 이 경우 호출이 무시되므로 먼저 HTML (페이지 소스보기)에서 JQuery에 대한 스크립트 링크가 모달 onShow호출 위에 있는지 확인하십시오 . 그렇지 않으면 무시됩니다. 문제를 해결하려면 이전에 온 쇼 안에 경고를 넣으십시오. onShow 함수 내부가 아니라 이전의 것을 본다면 함수를 실행할 수 없다는 것이 분명합니다. 철자가 맞으면 JQuery.js에 대한 호출이 이루어지지 않았거나 해당 onShow부분 이후에 만들어진 것입니다.


이것은 나를 도왔습니다 $('#myModal').on('show.bs.modal'...)-JQuery 가로 드 된 후에 있어야합니다. 감사!
Ian Wold

2

bootstrap4에서 동일한 문제가 발생했습니다. 해결책은 jQuery 문서 ready () 함수 안에 추가하는 것입니다.

$(document).ready(function() {
    $('#myModal').on('show.bs.modal', function () {
       alert('hi')
    })
}

1

다른 jquery 모달이 아닌 부트 스트랩 jquery 모달 을 실제로 사용하는지 확인하십시오 .

이것에 너무 많은 시간을 낭비했습니다 ...


1

같은 문제가있었습니다. 나를 위해 다음 순서로 jquery를 두 번로드했습니다.

  1. 로드 된 jQuery
  2. 로드 된 부트 스트랩
  3. jQuery를 다시로드했습니다.

jQuery가 두 번째로로드되었을 때 부트 스트랩에 대한 참조가 깨졌고 모달이 열렸지만 on ( 'shown.bs ..') 메서드는 실행되지 않았습니다.


0

제 경우에 문제는 어떻게 travelsize comment .. bootstrap.js와 jquery 사이의 수입 순서입니다. Metronic 템플릿을 사용하고 있고 전에 확인하지 않기 때문에



0

이것은 코드가 이전에 실행되었을 수 있고 표시되지 않을 때 발생하므로 tp fire에 대해 timeout ()을 추가 할 수 있습니다.

$(document).on('shown.bs.modal', function (event) {
      setTimeout(function(){
        alert("Hi");
      },1000); 
    });

-1

다음은 세부 정보입니다.

show.bs.modal은 모델 대화 상자를로드하는 동안 작동합니다. shown.bs.modal은로드 후 작업을 수행했습니다. 포스트 렌더링

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