페이지로드시 부트 스트랩 모달 시작


230

나는 자바 스크립트를 전혀 모른다. 부트 스트랩 문서에 따르면

javascript를 통해 모달을 호출하십시오. $ ( '# myModal'). modal (options)

페이지로드에서 이것을 호출하는 방법에 대한 단서가 없습니다. 부트 스트랩 페이지에서 제공된 코드를 사용하여 요소 클릭시 모달을 성공적으로 호출 할 수 있지만 페이지로드시 즉시로드하려고합니다.



3
이 질문은 여러 번 대답되었습니다. 검색 기능 "페이지로드시 자바 스크립트 실행"을 사용하십시오.
rlemon

14
@rlemon-반드시 그런 것은 아닙니다. 문제는 엄격하게 부트 스트랩 모달에 관한 것이며 일반적으로 페이지로드시 기능을 실행하지 않습니다. 부트 스트랩 모달은 CSS 클래스를 통해 조작 할 수 있습니다. 답변 중 하나를 참조하십시오.
Miro

이것은 on.load 이벤트와 함께 도움이됩니다 : w3schools.com/jsref/…
user2290820

답변:


426

load문서 헤드 섹션의 jQuery 이벤트 내에서 페이지로드에서 호출하려는 모달을 래핑하면 다음 과 같이 팝업됩니다.

JS

<script type="text/javascript">
    $(window).on('load',function(){
        $('#myModal').modal('show');
    });
</script>

HTML

<div class="modal hide fade" id="myModal">
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>

다음과 같은 링크로 호출하여 페이지 내에서 모달을 호출 할 수 있습니다.

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>

16
이 대답은 맞습니다. 한 가지주의해야 할 점은 문서 준비 이벤트에서 전혀 작동하지 않는다는 것 $(document).ready( ... 입니다. 윈도우로드 이벤트에서만 작동합니다 : $(window).load( ... .
racl101

5
또 다른 중요한 참고 사항 : 많은 사람들이 본문 끝에 자바 스크립트 포함을 게시합니다. 이 경우, 온로드 기능은 포함 후 마지막에 포함되어야합니다.
Adam Joseph Looze

@ racl101 그것은 정반대입니다 (게시 된 지 2 년이 지났으므로 일이 바뀔 수 있습니다). $(document).ready( ...사용자가 무언가를 클릭 할 때 동적으로 추가되는 모달의 MVC PartialView 에이 스크립트를 저장할 때만 작동 하므로 어쩌면 그럴 수 있습니다. 아이러니하게도, 하지 말아야 할 것에 대한 당신의 경고는 그것이 나를 위해 일하는 방법을 알아낼 수있게 해주었습니다. 감사합니다? :)
MikeTeeVee

부트 스트랩이 그것을 지배하여 아무것도 표시하지 않았기 때문에 숨기기는 (클래스로) 나를 위해 작동하지 않았습니다. 모달이 아닌 끔찍한 것처럼 보였으며 버튼을 누를 때도 닫히지 않았습니다. 자바 스크립트 부분은 효과가 있었지만 GAURAV MAHALE이 그의 대답에 사용한 모달의 html 부분을 사용하는 것이 좋지만 그의 모달 클래스에서 'show'라는 단어를 제거하는 것에 주목하십시오.
Malachi

jQuery 라이브러리를 먼저 포함하십시오!
ersks

84

javascript모달을 표시 할 필요가 없습니다

가장 간단한 방법은 "hide"를 "in"으로 바꾸는 것입니다.

class="modal fade hide"

그래서

class="modal fade in"

onclick = "$('.modal').hide()"버튼 닫기에 추가해야합니다 .

추신 : 가장 좋은 방법은 jQuery 스크립트를 추가하는 것입니다.

$('.modal').modal('show');

1
이 방법을 시도했지만 두 가지 문제가 있습니다. 1) 모달이 닫히지 않습니다. 2) 모달 배경이 사라졌습니다. 어떤 아이디어?
Nick Green

2
위의 jquery 솔루션은 훌륭하게 작동합니다. 한 줄의 코드가 트릭을 수행합니다. @NickGreen 이것을 시도해보십시오 : class = "modal fade". 'hide'와 'in'을 제거하십시오. 이것은 내 경우에는 작동하지만 아직 작동하지 않습니다. 그렇지 않으면 링크를 게시합니다.
랜디 그린 콘

39

다음을 추가하십시오.

class="modal show"

작업 예

<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<div class="container">
  <!-- Trigger the modal with a button -->
  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

  <!-- Modal -->
  <div class="modal show" id="myModal" role="dialog">
    <div class="modal-dialog">
    
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Modal Header</h4>
        </div>
        <div class="modal-body">
          <p>Some text in the modal.</p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>
      
    </div>
  </div>
  
</div>


10
이 솔루션이 작동하지 않습니다. 대화 상자가 페이지 상단에 영구적으로 붙어 있습니다. 또한 "modal"과 함께 "fade"클래스를 사용하면 대화 상자가 전혀 나타나지 않습니다.
Boris Burkov

7
모달을 표시 해야하는 시나리오에 따라 다릅니다. 필자의 경우 모달을 영구적으로 고정하고 싶습니다.
프로그래밍 교수

뿐만 아니라 밥의 문제가 발생

1
아무것도하지 않으면 왜 닫기 버튼이 있습니까? 이 작업을 수행 할 수있는 방법이 있습니까?
Ellen McCastle

1
@boris, 이것을 모달 닫기 버튼에 추가하십시오 :onclick = "$('.modal').removeClass('show').addClass('fade');"
Saw-mon and Natalie

21

이 실행 가능한 코드를 사용해보십시오.

$(window).load(function()
{
    $('#myModal').modal('show');
});
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<div class="container">
  <!-- Trigger the modal with a button -->
  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

  <!-- Modal -->
  <div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
    
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Modal Header</h4>
        </div>
        <div class="modal-body">
          <p>Some text in the modal.</p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>
      
    </div>
  </div>
  
</div>

자세한 내용은 여기를 참조하십시오 .

당신의 완전한 답이 있다고 생각하십시오.


헤드에 필요한 링크를 게시 해 주셔서 감사합니다.)
DanielaB67

나 에게이 코드는 아름답게 달린 유일한 코드였습니다. 감사.
Semmerket

7

Andre의 Ilich가 jquery라고 부르는 줄에 js 스크립트를 추가해야한다고 말한 것에 대해 :

<script src="content/bootstrapJS/jquery-2.1.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
     $(window).load(function(){
         $('#myModal').modal('show');
      });
</script>

내 경우에는 그것이 도움이되는 희망이었습니다.


5

필자의 경우 jQuery를 추가하여 모달을 표시하지 못했습니다.

$(document).ready(function() {
    $('#myModal').modal('show');
});

모달의 속성이 aria-hidden = "true"였기 때문인 것 같습니다.

<div class="modal fade" aria-hidden="true" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">

위의 jQuery뿐만 아니라 해당 속성을 제거해야했습니다.

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">

모달 클래스를에서 (으) modal fade로 변경하려고 시도했지만 modal fade in작동하지 않습니다. 또한로부터 클래스를 변경 modal fade하려면 modal show폐쇄 될 수있는에서 모달 멈췄다.


5

여기에 [자바 스크립트 초기화가없는 솔루션!]

javascript로 모달을 초기화 하지 않고 예제 찾을 수 없으므로 페이지로드시 javascript 지연$('#myModal').modal('show') 없이 구현할 수있는 방법에 대한 제안이 있습니다 .

  1. 클래스와 스타일로 모달 컨테이너 div를 편집하십시오.

<div class="modal in" id="MyModal" tabindex="-1" role="dialog" style="display: block; padding-right: 17px;">

  1. 클래스와 스타일로 몸을 편집하십시오.

    <body class="modal-open" style="padding-right:17px;">

  2. 모달 배경 div 추가

    <div class="modal-backdrop in"></div>

  3. 스크립트 추가

    $(document).ready(function() {
        $('body').css('padding-right', '0px');
        $('body').removeClass('modal-open');
        $('.modal-backdrop').remove();
    
        $('#MyModal').modal('show'); });

    일어날 일은 모달의 html이 자바 스크립트없이 페이지로드에로드 될 것입니다 (지연 없음). 이 시점에서 모달을 닫을 수 없으므로 모든 것이로드 될 때 모달을 올바르게로드하기 위해 document.ready 스크립트가 있습니다. 실제로 사용자 지정 코드를 제거한 다음 .modal ( 'show')를 사용하여 모달 (다시)을 초기화합니다.


좋은 제안. 감사!
RafaSashi

5

데이터 속성을 통해 JavaScript를 작성하지 않고도 모달을 활성화 할 수 있습니다.

"show"옵션을 true로 설정하면 초기화시 모달이 표시됩니다.

<div class="modal fade" tabindex="-1" role="dialog" data-show="true"></div>

4

다른 사람들이 언급했듯이 display : block으로 모달을 만듭니다.

<div class="modal in" tabindex="-1" role="dialog" style="display:block">
...

배경을 페이지의 아무 곳에 나 배치하십시오. 반드시 페이지 하단에있을 필요는 없습니다.

<div class="modal-backdrop fade show"></div> 

그런 다음 대화 상자를 다시 닫으려면 다음을 추가하십시오.

<script>
    $("button[data-dismiss=modal]").click(function () {
        $(".modal.in").removeClass("in").addClass("fade").hide();
        $(".modal-backdrop").remove();
    });
</script>

도움이 되었기를 바랍니다


4

부트 스트랩 3 및 jQuery (2.2 및 2.3)로 테스트

$(window).on('load',function(){
  $('#myModal').modal('show');
});



<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">

      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title"><i class="fa fa-exclamation-circle"></i>&nbsp; //Your modal Title</h4>
        </div>
        <div class="modal-body">
          //Your modal Content
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
        </div>
      </div>

    </div>
</div>

https://jsfiddle.net/d7utnsbm/


1
@EduardoCuomo 예, 작동합니다. jsfiddle.net/bsmpLvz6 이 예제는 Bootstrap 3.3 및 jQuery 2.2를 사용하여 만들어졌습니다
Felipe Lima

3
<div id="ModalStart" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-body">
          <p><i class="icon-spinner icon-spin icon-4x"></i></p>
    </div>
</div>

Javascript 없이도 시작할 때 표시 할 수 있습니다. "숨기기"클래스를 삭제하십시오.

class="Modal"

3

user2545728 및 Reft 답변 외에도 자바 스크립트는 없지만modal-backdrop in

추가해야 할 3 가지

  1. modal-backdrop in.modal 클래스 앞의 클래스가있는 div
  2. style="display:block;" .modal 클래스로
  3. fade in .modal 클래스와 함께

<div class="modal-backdrop in"></div>

<div class="modal fade in" tabindex="-1" role="dialog" aria-labelledby="channelModal" style="display:block;">

    <div class="modal-dialog modal-lg" role="document">

        <div class="modal-content">

            <div class="modal-header">

                <h4 class="modal-title" id="channelModal">Welcome!</h4>

            </div>

            <div class="modal-body" style="height:350px;">

                How did you find us?

            </div>

        </div>

    </div>

</div>

3

2020 업데이트-부트 스트랩 4

Bootstrap 4의 모달 마크 업이 약간 변경되었습니다. 페이지로드시 모달을 열고 선택적으로 모달의 표시를 지연시키는 방법은 다음과 같습니다.

$(window).on('load',function(){
    var delayMs = 1500; // delay in milliseconds

    setTimeout(function(){
        $('#myModal').modal('show');
    }, delayMs);
});    

<div class="modal fade" id="myModal">
      <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">My Modal</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                </div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary mx-auto" data-dismiss="modal">Close</button>
                </div>
            </div>
      </div>
</div>

Codeply 데모


또는 "data-show"속성을 사용할 수 있습니다. getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Mike

2

부트 스트랩 3에서는 js를 통해 모달을 초기화해야하며 페이지로드 순간에 모달 마크 업이 페이지에 있으면 모달이 표시됩니다.

이를 방지 show: false하려면 모달을 초기화하는 옵션을 사용하십시오 . 이 같은: $('.modal').modal({ show: false })


0

jquery.js더 빠른 페이지로드 를 위해 지연 상태를 유지할 수 있습니다 . 그러나 jquery.js지연되면 $(window).load작동하지 않을 수 있습니다. 그럼 당신은 시도 할 수 있습니다

setTimeout(function(){$('#myModal').modal('show');},3000);

페이지가 완전히로드 된 후 모달이 팝업됩니다 (jquery 포함)


3
DOM이 준비 될 수 있도록 타임 아웃을 설정하는 것은 궁극적으로 나쁜 관행입니다. 10 초가 걸릴 수 있습니다 .. 절대 절대 이렇게하지 마십시오
DutchKevv

0

부트 스트랩이 무효화되고 기능이 손실되는 것을 피하려면 일반 시작 버튼을 만들고 ID를 제공 한 다음 jquery를 사용하여 '클릭'하십시오.

<button type="button" id="btnAnouncement" class="btn btn-primary" data-toggle="modal" data-target="#modalAnouncement">
  See what´s new!
</button>

jQuery 트리거 :

$(document).ready(function () {
  $('#btnAnouncement').click();
)}

도움이 되길 바랍니다. 건배!


-1

간단한 예 부트 스트랩 모달의 로더 스피너 만들기

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script>
  $(document).ready(function(){
  $('#myModal').modal('show'); 
  setTimeout(function(){
  $('#myModal').modal('hide'); 
  }, 5000);
   });
  </script>
  <style>
.loader {
  border: 13px solid #f3f3f3;
  border-radius: 50%;
  border-top: 16px solid #3498db;
  width: 100px;
  height: 100px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;
}

/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
.modal-dialog{
width: 150px;
    margin: 10% auto;
}
.modal-content{
background-color: transparent; 
   border: 0;
    border-radius: 0;
    outline: 0;
    box-shadow: none;
}
</style>
</head>
<body>

<div class="container">

  <!-- Modal -->
  <div class="modal fade" data-backdrop="static" id="myModal" role="dialog">
    <div class="modal-dialog">

      <!-- Modal content-->
      <div class="modal-content">

        <div class="modal-body">
         <div class="loader"></div>
        </div>

      </div>

    </div>
  </div>

</div>

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