วิธีการเปิดหน้าต่าง Modal Bootstrap โดยใช้ jQuery


769

ฉันกำลังใช้ฟังก์ชั่นหน้าต่าง Modal Twitter Bootstrap เมื่อมีคนคลิกส่งในแบบฟอร์มของฉันฉันต้องการแสดงหน้าต่างโมดอลเมื่อคลิกปุ่ม "ส่ง" ในแบบฟอร์ม

<form id="myform" class="form-wizard">
    <h2 class="form-wizard-heading">BootStap Wizard Form</h2>
    <input type="text" value=""/>
    <input type="submit"/>
</form>

<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Modal header</h3>
    </div>
    <div class="modal-body">
        <p>One fine body…</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save changes</button>
    </div>
</div>

jQuery:

$('#myform').on('submit', function(ev) {
    $('#my-modal').modal({
        show: 'false'
    }); 


    var data = $(this).serializeObject();
    json_data = JSON.stringify(data);
    $("#results").text(json_data); 
    $(".modal-body").text(json_data); 

    // $("#results").text(data);

    ev.preventDefault();
});

คุณพิมพ์ผิดในตัวเลือกการแสดงของคุณ มันต้องใช้บูลีนดังนั้นอย่าใส่เครื่องหมายคำพูดล้อมรอบ 'false' - $ ('# my-modal'). modal ({show: false});
Darren Parker

คำตอบ:


1413

Bootstrap มีฟังก์ชั่นบางอย่างที่สามารถเรียกได้ด้วยตนเองใน modals:

$('#myModal').modal('toggle');
$('#myModal').modal('show');
$('#myModal').modal('hide');

คุณสามารถดูเพิ่มเติมได้ที่นี่: Bootstrap modal component

โดยเฉพาะส่วนวิธีการ

ดังนั้นคุณจะต้องเปลี่ยน:

$('#my-modal').modal({
    show: 'false'
}); 

ถึง:

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

หากคุณกำลังมองหาที่จะทำให้ป๊อปอัพที่กำหนดเองของคุณเองนี่คือวิดีโอที่แนะนำจากสมาชิกชุมชนอื่น:

https://www.youtube.com/watch?v=zK4nXa84Km4


5
ฉันไม่แน่ใจว่าทำไมสิ่งนี้ไม่ทำงานในกรณีของฉัน ฉันมีรหัสตัวอย่างเดียวกันในหน้าของฉันและฉันได้รหัสปุ่มส่งด้านบน อย่างไรก็ตามเมื่อฉันคลิกส่งหน้าต่าง modal จะกะพริบเร็วและหายไป ฉันต้องคลิกปุ่ม 'ย้อนกลับ' ของเบราว์เซอร์เพื่อส่งคืนหน้า
Chris22

6
ฉันพบผู้สังเกตการณ์ที่นี่เพื่อแสดงความคิดเห็นของฉันข้างต้น ลิงก์ซ้ำไปยัง bootrap.js บนหน้าเว็บไซต์
Chris22

1
Uncaught TypeError: $ (... ). modal ไม่ใช่ฟังก์ชั่นนี่อาจเป็นฉัน แต่เป็นความคิดใด ๆ ที่ทำให้ฉันได้รับข้อผิดพลาดนี้? (ฉันมี jQuery)
Vladimir verleg

4
ฉันพบปัญหาของฉันฉันโทร ajax ไปที่แม่มดไฟล์รวม Jquery หากรวม jQuery 2 ครั้งมันไม่ทำงาน!
Vladimir verleg

2
ฉันลองใช้.modal('show')แต่ในเบราว์เซอร์ Google Chrome มันไม่ทำงาน
Durga

89

นอกจากนี้คุณสามารถใช้งานผ่าน data data ได้

<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>

ในกรณีนี้คุณไม่จำเป็นต้องเขียนจาวาสคริปต์

คุณสามารถดูเพิ่มเติมได้ที่นี่: http://getbootstrap.com/2.3.2/javascript.html#modals


4
ในการชี้แจง: "ไม่จำเป็นต้องใช้จาวาสคริปต์" หมายถึง "ไม่จำเป็นต้องเขียนจาวาสคริปต์" จาวาสคริปต์ยังคงใช้งานอยู่ ฉันพยายามแก้ไขคำตอบ แต่ถูกปฏิเสธเพราะมันไม่ "แม่นยำกว่า" หากคุณลองใช้รหัสด้านบนโดยปิดการใช้งานจาวาสคริปต์มันจะไม่ทำงาน นั่นหมายความว่าคุณใช้จาวาสคริปต์กับฉัน
npretto ถึง

83

บ่อยครั้งที่เมื่อ$('#myModal').modal('show');ใช้งานไม่ได้เกิดจากการรวม jQuery สองครั้ง การรวม jQuery 2 ครั้งทำให้ modals ไม่ทำงาน

ลบลิงก์ใดลิงก์หนึ่งเพื่อให้มันทำงานได้อีกครั้ง

นอกจากนี้ปลั๊กอินบางตัวยังทำให้เกิดข้อผิดพลาดด้วยในกรณีนี้เพิ่ม

jQuery.noConflict(); 
$('#myModal').modal('show'); 

3
DataTables ที่เป็นรุ่น jQuery ที่ได้รับการบรรจุล่วงหน้านั้นทำให้ฉัน
Wesley Smith

2
ขอบคุณมาก. ฉันมีปัญหาเดียวกัน: modal ไม่ใช่ฟังก์ชั่น แต่หลังจากเพิ่ม jQuery.noConflict () แล้วก็ใช้งานได้
ปฏิบัติงาน Ahmmed

1
ควรสังเกตว่าควรใช้วิธีแก้ปัญหานี้เฉพาะเมื่อคุณไม่สามารถแก้ไขสาเหตุที่แท้จริงได้ (เช่นมีเพียง jQuery หนึ่งครั้ง) หากปลั๊กอินของบุคคลที่สามบางตัวรวมอยู่ด้วยให้ค้นหารุ่นที่ไม่รวมอยู่หรือติดต่อบุคคลที่สามเพื่อสร้าง
rybo111

19

เพียงแค่เรียกวิธี modal (โดยไม่ผ่านพารามิเตอร์ใด ๆ ) โดยใช้jQueryตัวเลือก

นี่คือตัวอย่าง:

$('#modal').modal();

1
ฉันจะส่งพารามิเตอร์เพิ่มเติมไปที่โมดอลของฉันได้อย่างไร ตัวอย่างเช่น ID เฉพาะ (ไดนามิก)
Pathros

1
คุณทำให้ ID ของคุณเป็นแบบไดนามิกได้อย่างไร คุณทำด้วย ID หรือไม่ ถ้าใช่คุณสามารถใช้ฟังก์ชั่น $ (นี้) จาก jQuery เพื่อเลือกวัตถุปัจจุบันและส่งพารามิเตอร์ให้เขา
Brane

13

หากคุณใช้ฟังก์ชั่น onclick ของลิงก์เพื่อเรียก modal โดย jQuery "href" จะต้องไม่เป็นค่าว่าง

ตัวอย่างเช่น:

... ...
<a href="" onclick="openModal()">Open a Modal by jQuery</a>
... ...
... ...
<script type="text/javascript">

function openModal(){

    $('#myModal').modal();
}       
</script>

Modal ไม่สามารถแสดงได้ รหัสที่ถูกต้องคือ:

<a href="#" onclick="openModal()">Open a Modal by jQuery</a>

12

นี่คือวิธีโหลดการแจ้งเตือน bootstrap ทันทีที่เอกสารพร้อม มันง่ายมากเพียงแค่เพิ่ม

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

ฉันสาธิตบน W3Schools

<!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.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Here is how to load a bootstrap modal as soon as the document is ready </h2>
  <!-- Trigger the modal with a 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>

<script>
$(document).ready(function(){
   $("#myModal").modal();
});
</script>

</body>
</html>


10

ลองดูโซลูชันที่สมบูรณ์ที่นี่:

http://www.w3schools.com/bootstrap/tryit.asp?filename=trybs_ref_js_modal_show&stacked=h

ตรวจสอบให้แน่ใจว่าใส่ไลบรารีตามลำดับที่ต้องการเพื่อรับผลลัพธ์:

1- bootstrap.min.css 2- jquery.min.js 3- bootstrap.min.js

(ในคำอื่น ๆ jquery.min.js จะต้องโทรก่อน bootstrap.min.js)

    <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.1.1/jquery.min.js">
</script> 

 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

7

ฉันพยายามหลายวิธีที่ล้มเหลว แต่ด้านล่างใช้งานได้สำหรับฉันเหมือนมีเสน่ห์:

$('#myModal').appendTo("body").modal('show');

2
เหมือนกัน! นี่เป็นทางออกเดียวที่ใช้ได้สำหรับฉันเช่นกัน
pengz

คุณแน่ใจว่ามันไม่ได้ต้องการ.appendTo("modal-body")?
James A Mohler

@novembersky คุณต้องใส่รหัสในเหตุการณ์คลิกหรือเมื่อโหลดหน้าเว็บโดยใช้ jquery: $ (เอกสาร). ready (function () {$ ("# myModal"). modal ();});
Abhijit Kumar

7

ลองใช้jQueryแทน$ sign เมื่อเรียกใช้ฟังก์ชันมันทำงานได้ในกรณีของฉันตามที่คุณเห็นด้านล่าง

jQuery.noConflict(); 
jQuery('#myModal').modal('show'); 

jQuery.noConflict (); เพราะเมื่อ jQuery ('# myModal'). modal ('แสดง'); ไม่ทำงานเกิดจากการรวม jQuery สองครั้ง การรวม jQuery 2 ครั้งทำให้ modals ไม่ทำงาน และมันจะแก้ไขปัญหาในกรณีเช่นเดียวกับในกรณีของฉันมันกำลังทำซ้ำ

นอกจากนี้คุณสามารถไปที่ลิงค์นี้

หน้าต่างโมเดล Bootstrap ไม่แสดงโดยการโทรผ่าน JQuery


4

ลอง

$("#myModal").modal("toggle")

ในการเปิดหรือปิด modal ด้วย id myModal

หากข้างต้นไม่ทำงานก็หมายความว่า bootstrap.js ถูกแทนที่โดยไฟล์ js อื่น ๆ นี่คือทางออก

1: - ย้าย bootstrap.js ไปที่ด้านล่างเพื่อแทนที่ไฟล์ js อื่น ๆ

2: - ตรวจสอบให้แน่ใจว่าการสั่งซื้อเป็นเหมือนด้านล่าง

<script src="plugins/jQuery/jquery-2.2.3.min.js"></script>
<!-- Other js files -->
<script src="plugins/jQuery/bootstrap.min.js"></script>

4
<form id="myform" class="form-wizard">
    <h2 class="form-wizard-heading">BootStap Wizard Form</h2>
    <input type="text" value=""/>
    <input type="submit" id="submitButton"/>
</form>

<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Modal header</h3>
    </div>
    <div class="modal-body">
        <p>One fine body…</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save changes</button>
    </div>
</div>

คุณสามารถเปิดใช้งาน modal ด้วยรหัสด้านล่างนี้

$(document).ready(function(){
    $("#submitButton").click(function(){
        $("#myModal").modal();
    });
});


0
<script type="text/javascript">
    $(function () {
        $("mybtn").click(function () {
            $("#my-modal").modal("show");
        });
    });
</script>

3
เมื่อตอบคำถามที่มีคำตอบอยู่แล้วโปรดพยายามขยายคำตอบที่มีอยู่ โดยทั่วไปควรรวมคำอธิบายว่ารหัสของคุณตอบคำถามอย่างไร
Chris Camaratta

0

Bootstrap 4.3 - เพิ่มเติมได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.