เรียกใช้ Bootstrap Modal เมื่อโหลดหน้าเว็บ


230

ฉันไม่รู้จักจาวาสคริปต์เลย เอกสารประกอบการบูตบอกว่า

โทรหาคำกริยาผ่าน javascript: $ ('# myModal'). modal (ตัวเลือก)

ฉันไม่มีเงื่อนงำวิธีเรียกสิ่งนี้ในการโหลดหน้าเว็บ ใช้รหัสที่ให้มาในหน้า bootstrap ฉันสามารถเรียก Modal ในการคลิกองค์ประกอบ แต่ฉันต้องการให้โหลดทันทีในการโหลดหน้า



3
คำถามนี้ได้รับการตอบไปหลายครั้งแล้ว กรุณาใช้ฟังก์ชั่นการค้นหา "เรียกใช้จาวาสคริปต์ในการโหลดหน้า"
rlemon

14
@rlemon - ไม่จำเป็นต้อง; คำถามนี้เกี่ยวกับ Bootstrap modal อย่างเคร่งครัดและไม่ได้เรียกใช้ฟังก์ชั่นเมื่อโหลดหน้าเว็บโดยทั่วไป Bootstrap modal สามารถจัดการผ่านคลาส CSS ได้เช่นกันดูคำตอบข้อใดข้อหนึ่ง
Miro

สิ่งนี้จะช่วยให้ผู้เรียบเรียง: w3schools.com/jsref/…พร้อมกับเหตุการณ์ onload
2290820

คำตอบ:


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
หมายเหตุสำคัญอื่น: ผู้คนจำนวนมากโพสต์จาวาสคริปต์รวมไว้ที่ส่วนท้ายของเนื้อหา ในกรณีนี้ฟังก์ชั่น onload จะต้องรวมในตอนท้ายหลังจากรวม
Adam Joseph Looze

@ racl101 มันเป็นสิ่งที่ตรงกันข้ามสำหรับฉัน (เป็นเวลา 2 ปีแล้วตั้งแต่ที่คุณโพสต์ดังนั้นอาจมีการเปลี่ยนแปลง) ใช้งานได้เฉพาะ$(document).ready( ...เมื่อฉันเก็บสคริปต์นี้ใน MVC PartialView สำหรับ Modal ของฉันที่เพิ่มแบบไดนามิกเมื่อผู้ใช้คลิกที่บางอย่างดังนั้นอาจเป็นเหตุผล การเตือนของคุณเกี่ยวกับสิ่งที่ไม่ควรทำทำให้ฉันคิดออกว่าจะทำงานให้ฉันได้อย่างไร ขอบคุณนะ :)
MikeTeeVee

ซ่อนไม่ทำงานสำหรับฉัน (เป็นคลาส) เนื่องจาก bootstrap เขียนทับมันดังนั้นจึงไม่แสดงอะไรเลย มันดูแย่มาก (ไม่เหมือน modal) และมันก็ไม่ได้ปิดเมื่อคุณกดปุ่ม ส่วน javascript ใช้งานได้ แต่ฉันขอแนะนำให้ใช้ส่วน html ของคำกริยาที่ GAURAV MAHALE ใช้ในคำตอบของเขา แต่โปรดลบคำว่า 'show' ในคลาสของคำกริยาของเขา
มาลาคี

เพียงใส่ jQuery Library ก่อน!
ersks

84

คุณไม่จำเป็นต้องjavascriptแสดงคำกริยา

วิธีที่ง่ายที่สุดคือแทนที่ "ซ่อน" โดย "ใน"

class="modal fade hide"

ดังนั้น

class="modal fade in"

และคุณต้องเพิ่มonclick = "$('.modal').hide()"ปุ่มปิด

PS: ฉันคิดว่าวิธีที่ดีที่สุดคือการเพิ่มสคริปต์ jQuery:

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

1
ฉันได้ลองวิธีนี้แล้ว แต่มีปัญหาสองข้อ 1) คำกริยาจะไม่ปิด 2) พื้นหลังเป็นกิริยาช่วยหายไป ความคิดใด ๆ
Nick Green

2
วิธีการแก้ปัญหา jquery ดังกล่าวทำงานได้ดี รหัสหนึ่งบรรทัดจะหลอกลวง @NickGreen ลองดู: class = "modal fade" ลบ 'ซ่อน' และ 'ใน' ใช้งานได้ในกรณีของฉัน แต่ยังไม่ได้ใช้งานมิฉะนั้นฉันจะโพสต์ลิงก์
Randy Greencorn

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" กล่องโต้ตอบจะไม่ปรากฏเลย
Boris Burkov

7
ขึ้นอยู่กับสถานการณ์ที่จะต้องแสดงคำกริยาในกรณีของฉันฉันต้องการให้กิริยาติดอยู่อย่างถาวร
ศาสตราจารย์การเขียนโปรแกรม

พบปัญหาของ Bob เช่นกัน

1
เหตุใดจึงมีปุ่มปิดหากพวกเขาไม่ทำอะไรเลย มีวิธีใดบ้างที่จะทำให้เรื่องนี้ใช้งานได้?
Ellen McCastle

1
@boris เพิ่มสิ่งนี้ในปุ่มปิด modal:onclick = "$('.modal').removeClass('show').addClass('fade');"
Saw-mon และ 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

สำหรับฉันรหัสนี้เป็นเพียงคนเดียวที่ runned อย่างสวยงาม ขอบคุณ
Semmerket

7

เกี่ยวกับสิ่งที่ Ilich ของ Andre พูดว่าคุณต้องเพิ่มสคริปต์ js หลังจากบรรทัดในสิ่งที่คุณเรียกว่า jquery:

<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 เพื่อแสดง modal ไม่ทำงาน:

$(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

นี่เป็นวิธีแก้ปัญหา [โดยไม่ต้องเริ่มต้นจาวาสคริปต์!]

ฉันไม่พบตัวอย่างโดยไม่เริ่มต้น modal ของคุณด้วย javascript $('#myModal').modal('show')ดังนั้นจึงแนะนำว่าคุณจะใช้งานได้อย่างไรโดยไม่ทำให้ javascript หน่วงเวลาโหลดหน้าเว็บ

  1. แก้ไข div modal container ของคุณด้วย class และ style:

<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. เพิ่ม dival-Backdrop 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 (อีกครั้ง) ด้วย. modal ('แสดง')


คำแนะนำที่ดี ขอบคุณ!
RafaSashi

5

คุณสามารถเปิดใช้งานโมดอลได้โดยไม่ต้องเขียน JavaScript ใด ๆ เพียงแค่ใส่ข้อมูล

ตัวเลือก "แสดง" ตั้งค่าเป็นจริงแสดงโมดอลเมื่อเริ่มต้น:

<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 ตัวอย่างนี้ทำโดยใช้ 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

นอกเหนือจากคำตอบของผู้ใช้ 2545728 และ Reft โดยไม่ต้องใช้ Javascriptแต่ใช้กับmodal-backdrop in

3 สิ่งที่จะเพิ่ม

  1. div กับคลาสmodal-backdrop inก่อนคลาส. modal
  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 - Bootstrap 4

มาร์กอัป modal มีการเปลี่ยนแปลงเล็กน้อยสำหรับ Bootstrap 4 นี่คือวิธีที่คุณสามารถเปิด modal ในการโหลดหน้าและเลือกที่จะชะลอการแสดง modal ...

$(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

ใน bootstrap 3 คุณเพียงแค่ต้องเริ่มต้นโมดอลถึง js และหากในช่วงเวลาของหน้าโหลดมาร์กอัป modal อยู่ในหน้าโมดัลจะปรากฏขึ้น

ในกรณีที่คุณต้องการป้องกันไม่ให้ใช้ตัวเลือกshow: falseที่คุณเริ่มต้น modal บางสิ่งเช่นนี้ $('.modal').modal({ show: false })


0

คุณอาจต้องการjquery.jsรอการตัดต่อเพื่อการโหลดหน้าเว็บที่เร็วขึ้น อย่างไรก็ตามหากjquery.jsเลื่อนไปก่อน$(window).loadอาจไม่ทำงาน จากนั้นคุณอาจลอง

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

มันจะป๊อปอัปโมดอลของคุณหลังจากโหลดหน้าเสร็จสมบูรณ์ (รวมถึง jquery)


3
การตั้งค่าการหมดเวลาสำหรับ DOM เพื่อให้พร้อมเป็นวิธีปฏิบัติที่แย่ที่สุด .. จะเกิดอะไรขึ้นถ้าผู้ใช้มีการเชื่อมต่อที่ช้า กว่าจะใช้เวลา 10 วินาที .. ดังนั้นอย่าทำอย่างนี้เลย
DutchKevv

0

เพื่อหลีกเลี่ยงการบูทสแตรปที่ถูกแทนที่และทำลาย funcionality เพียงแค่สร้างปุ่มเปิดใช้งานปกติให้มันมีรหัสและ 'คลิกมัน' โดยใช้ 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

ตัวอย่างง่าย ๆ สร้างตัวโหลดเดอร์สปินเนอร์ของ bootstrap modal

<!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.