ページ読み込み時にブートストラップモーダルを起動


230

私はjavascriptをまったく知りません。ブートストラップのドキュメントには、

javascriptを介してモーダルを呼び出します:$( '#myModal')。modal(options)

ページの読み込み時にこれを呼び出す方法はわかりません。ブートストラップページで提供されたコードを使用すると、要素のクリックでモーダルを正常に呼び出すことができますが、ページの読み込み時にすぐに読み込みます。



3
この質問は何度も回答されています。検索機能「ページの読み込み時にJavaScriptを実行」を使用してください。
rlemon 2012

14
@rlemon-必ずしもそうではありません。問題は厳密にはブートストラップモーダルであり、一般にページの読み込み時に関数を実行しないことでした。ブートストラップモーダルはCSSクラスを介して操作することもできます。回答の1つを参照してください。
ミロ

:この意志help.simpler w3schools.com/jsref/... onloadイベントで
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
この答えは正しいです。注意すべきことの1つは、これはドキュメント準備イベントではまったく機能しないことです$(document).ready( ... 。ウィンドウロードイベントでのみ機能します$(window).load( ...
racl101 2014

5
もう1つの重要な注意:多くの人が本文の最後にJavaScriptインクルードを投稿しています。その場合、onload関数はインクルードの後の最後に含める必要があります。
アダムジョセフルーズ

@ racl101それは私にとっては正反対です(あなたの投稿から2年経過しているため、状況が変わっている可能性があります)。これ$(document).ready( ...は、ユーザーが何かをクリックしたときに動的に追加されるモーダルのMVC PartialViewにこのスクリプトを保存する場合にのみ機能するため、おそらくそれが理由です。皮肉なことに、何をすべきでないかというあなたの警告により、私はそれを私のために機能させる方法を理解することができました。ほんとありがと?:)
MikeTeeVee 2016

ブートストラップがそれを覆し、何も表示しないため、(クラスとして)私にとってHideは機能しませんでした。(モーダルのようではなく)ひどく見え、ボタンを押しても閉じませんでした。javascript部分は機能しましたが、私はGAURAV MAHALEが彼の回答で使用したモーダルのhtml部分を使用することをお勧めしますが、彼のモーダルのクラスで「表示」という単語を削除することに注意してください。
マラキ

最初にjQuery Libraryを含めてください!
ersk

84

javascriptモーダルを表示する必要はありません

最も簡単な方法は、 "hide"を "in"に置き換えることです。

class="modal fade hide"

そう

class="modal fade in"

onclick = "$('.modal').hide()"ボタンを閉じる必要があります。

PS:私は最良の方法はjQueryスクリプトを追加することだと思います:

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

1
私はこの方法を試しましたが、2つの問題が発生します。1)モーダルが閉じません。2)モーダル背景が消えました。何か案は?
Nick Green

2
上記のjqueryソリューションはうまく機能します。1行のコードでうまくいきます。@NickGreen試してみてください:class = "modal fade"。「非表示」と「中」を削除します。これは私の場合は機能しますが、まだライブではありません。それ以外の場合は、リンクを投稿します。
ランディグリーンコーン2015

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
このソリューションは機能していません。ダイアログがページの上部に固定されたままです。また、「フェード」クラスを「モーダル」とともに使用すると、ダイアログはまったく表示されません。
Boris Burkov 2014

7
それは、モーダルを表示する必要があるシナリオに依存します。私の場合、モーダルを永続的にスタックさせたいです。
プログラミングの教授、

ボブの問題にも遭遇しました

1
何もしないのに閉じるボタンがあるのはなぜですか?これを機能させる方法はありますか?
Ellen McCastle 2017年

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's 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

Heresソリューション[javascript初期化なし!]

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がJavaScriptなしでページの読み込み時に読み込まれることです(遅延なし)。この時点ではモーダルを閉じることができないため、すべてが読み込まれたときにモーダルを適切に読み込むためのdocument.readyスクリプトがあります。実際にカスタムコードを削除してから、モーダルを(再度).modal( 'show')で初期化します。


良い提案。ありがとう!
RafaSashi 2016年

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

Bootstrap 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 この例では、ブートストラップ3.3とjQuery 2.2使用して作られた
フェリペ・リマ

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がなくても、起動時に表示できます。クラス「hide」を削除するだけです。

class="Modal"

3

user2545728とReftの回答に加えて、javascriptなしで、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.