ปิด Bootstrap Modal


432

ฉันมีกล่องโต้ตอบ modal bootstrap ที่ฉันต้องการแสดงเริ่มแรกจากนั้นเมื่อผู้ใช้คลิกที่หน้ามันจะหายไป ฉันมีดังต่อไปนี้:

$(function () {
   $('#modal').modal(toggle)
});

 <div class="modal" id='modal'>
     <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Error:</h3>
        </div>
        <div class="modal-body">
        <p>Please correct the following errors:</p>
        </div>
     </div>
 </div>

คำกริยาจะปรากฏขึ้นครั้งแรก แต่จะไม่ปิดเมื่อคลิกที่ด้านนอกของคำกริยา นอกจากนี้พื้นที่เนื้อหาไม่ได้เป็นสีเทา .. ฉันจะทำให้ modal แสดงได้อย่างไรจากนั้นปิดหลังจากที่ผู้ใช้คลิกนอกพื้นที่? และฉันจะทำให้พื้นหลังเป็นสีเทาเหมือนในตัวอย่างได้อย่างไร


คุณกำลังเริ่มต้นคำกริยาของคุณด้วย$("#yourModal").modal()หรือ$('.modal').modal()?
merv

เพิ่มบริบทเพิ่มเติมด้านบน ขอบคุณสำหรับความคิดใด ๆ @merv!
Nick B

อ๋อ ... นั่นแสดงว่าเป็นปัญหา @ ทมิฬมีทางออกของคุณ
merv

คำตอบ:


706

ใส่modal('toggle')แทนmodal(toggle)

$(function () {
   $('#modal').modal('toggle');
});

5
การรวม 'toggle' ไว้ด้วยนั้นยอดเยี่ยมมาก เพียงตรวจสอบให้แน่ใจว่าไม่ได้มีคลาส 'ซ่อน' ใน dival modal แต่ใช่การพิมพ์ผิดเป็นสาเหตุของปัญหา ดังนั้น +1
merv

22
ไม่มันไม่ทำงานตามที่ตั้งใจไว้มันซ่อนองค์ประกอบโมดอล แต่องค์ประกอบการซ้อนทับพื้นหลังยังคงมีอยู่คุณควรใช้โซลูชัน @Subodth
Parik Tiwari

1
@Pierre - พิจารณาลบความคิดเห็นของคุณ. modal (). hide () ไม่เหมือนกับ. modal ('hide') คุณจะสับสนคน
Michael Peterson

2
เช่นเดียวกับ Parik ที่กล่าวว่าคำตอบที่ถูกต้องคือใช้คำกริยา ('ซ่อน')
MidouCloud

นี่ไม่ใช่คำตอบที่ถูกต้องตรวจสอบคำตอบด้านล่าง!
user1467439

412

เพื่อปิด bootstrap modalคุณสามารถส่ง'hide'เป็นตัวเลือกให้กับ modal method ดังต่อไปนี้

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

โปรดดูซอทำหน้าที่ที่นี่

bootstrap ยังมีกิจกรรมที่คุณสามารถขอเข้าฟังก์ชั่นmodal ได้เช่นถ้าคุณต้องการเริ่มต้นเหตุการณ์เมื่อ modal เสร็จสิ้นการซ่อนจากผู้ใช้คุณสามารถใช้hidden.bs.modal event คุณสามารถอ่านเพิ่มเติมเกี่ยวกับวิธี modal และกิจกรรมที่นี่ในเอกสาร

หากวิธีการข้างต้นไม่ทำงานให้รหัสไปที่ปุ่มปิดของคุณแล้วคลิกที่ปุ่มปิด


4
$ ( '# กิริยา') คำกริยา ( 'สลับ'). ดีกว่าที่จะซ่อน modal shadow
hamzeh.hanandeh

5
@ hamzeh.hanandeh toggleเก็บภาพซ้อนทับและไม่ใช่วิธีแก้ปัญหา คุณควรใช้อย่างใดอย่างหนึ่งหรือshow hide
ryanpcmcquen

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

หรือ

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

ควรทำงาน.

แต่ถ้าไม่มีสิ่งใดที่ใช้งานได้คุณสามารถเรียกปุ่มปิด modal โดยตรง

$("#modal .close").click()

10
ส่วนที่มี hide () จะปิด modal แต่จะทำให้พื้นหลังเบลอ $ ("# modal .close"). click () ทำได้อย่างสมบูรณ์แบบ ขอบคุณ!
Shilpa

4
นี่เป็นเอกสารที่ชัดเจนอยู่แล้วที่นี่ไม่จำเป็นต้องปลอมคลิกซึ่งดูเหมือนว่าค่อนข้างบอบบาง คำตอบที่ถูกต้องคือ: $ ('# modal'). modal ('hide');
Michael Peterson

สิ่งนี้ -> $ ('# modal'). modal (). hide ();
TARA

ฉันมีรุ่นที่ไม่ปิดด้วย$('#modal').modal('hide')อย่างไรก็ตามฉันสามารถปิดได้โดยใช้$('#modal').modal('toggle')แต่แสดงแถบเลื่อนแนวตั้งหลังจากปิด ดังนั้นสำหรับฉัน$('#modal').hide()ทำงานได้อย่างสมบูรณ์ แต่ฉันต้องการทราบว่าจะสร้างปัญหาใด ๆ ? และฉันกำลังเขียนโค้ดอยู่ภายใน$('#modal .close').click()ดังนั้นฉันไม่คิดว่าฉันจะใช้มันเพื่อปิดคำกริยา
Ahtisham



18

ลองสิ่งนี้

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

3
ฉันคิดว่านี่เป็นคำตอบสำหรับคำถาม
jkdev

1
ฉันเห็นด้วย. คำตอบนี้ถูกต้องมากขึ้นสำหรับคำถาม
mikeyq6

1
นี่คือคำตอบที่ดีกว่า upvoted ที่สุด
Marcelo Agimóvel

@ MarceloAgimóvel :-)
Love Kumar

10

อันนี้ค่อนข้างดีและมันยังทำงานในเชิงมุม 2

$("#modal .close").click()

ใช้งานได้สำหรับฉันแทนที่จะ$('#modal').modal('toggle');ไม่มีผลใด ๆ
Todor Todorov

8

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

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

2
ความตั้งใจดี แต่วิธีนี้ไม่ได้ผลเสมอไป อิลิเมนต์หน้าอื่น ๆ รวมถึง<body>มีคลาสที่ถูกเพิ่มเข้าไปซึ่งจะต้องถูกเปลี่ยนกลับเช่นกัน คำตอบที่ดีที่สุดคือการใช้'hide'วิธีการ
JustinStolle

7

ในบางกรณีการพิมพ์ผิดพลาดอาจเป็นสาเหตุของความผิดพลาด ตัวอย่างเช่นให้แน่ใจว่าคุณมี:

data-dismiss="modal"

และไม่

data-dissmiss="modal"

สังเกตุ double "ss" ในตัวอย่างที่สองที่จะทำให้ปุ่ม Close ที่ล้มเหลว


6

เราสามารถปิดป๊อปอัพคำกริยาด้วยวิธีต่อไปนี้:

// We use data-dismiss property of modal-up in html to close the modal-up,such as

<div class='modal-footer'><button type='button' class="btn btn-default" data-dismiss='modal'>Close</button></div>

 // We can close the modal pop-up through java script, such as

 <div class='modal fade pageModal'  id='openModal' tabindex='-1' data-keyboard='false' data-backdrop='static'>

    $('#openModal').modal('hide'); //Using modal pop-up Id.
    $('.pageModal').modal('hide'); //Using class that is defined in modal html.

6

$('.modal.in').modal('hide');

ใช้รหัสด้านบนเพื่อซ่อนฉากหลังของคำกริยาถ้าคุณใช้หลายคำกริยาป๊อปในหน้าเดียว


หรือ$('.modal').modal('hide');จะทำเท่านั้น
Matt Roy

6

<!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/2.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
$(window).load(function(){
      $('#myModal').modal('show');
});
$(function () {
   $('#modal').modal('toggle');
});
</script>
</head>
<body>

<div class="container">
  <h2>Modal Example</h2>
  <!-- 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>

</body>
</html>


ข้อผิดพลาด: "message": "Uncaught TypeError: $ (... ). modal ไม่ใช่ฟังก์ชั่น"
Ivan Burlutskiy

ใช่. ฉันมีข้อผิดพลาดหาก "เรียกใช้ข้อมูลโค้ด" ใน Chrome (Linux Mint) แต่มันใช้งานได้ใน Firefox
Ivan Burlutskiy

1
@Ivan Burlutskiy ขอขอบคุณที่แจ้งให้ฉันทราบปัญหาเหล่านี้เป็นปัญหาของ jquery รวมดังนั้นฉันจึงแก้ไขได้ ตอนนี้มันทำงานได้ดีในเบราว์เซอร์ทั้งหมด
Ganesh Putta

5
   function Delete(){
       var id = $("#dgetid").val();
       debugger
       $.ajax({
           type: "POST",
           url: "Add_NewProduct.aspx/DeleteData",
           data: "{id:'" + id + "'}",
           datatype: "json",
           contentType: "application/json; charset=utf-8",
           success: function (result) {
               if (result.d == 1) {
                   bindData();
                   setTimeout(function(){ $('#DeleteModal').modal('hide');},1000);
               }
           }
       });
   };

สวัสดี - ขอบคุณสำหรับคำตอบของคุณ ฉันได้จัดรูปแบบนี้เป็นรหัส (ซึ่งค่อนข้างง่าย - เพียงแค่เยื้องบรรทัดแรกอีกเล็กน้อย) อย่างไรก็ตามฉันเดาว่า$('#DeleteModal').modal('hide');มีความเกี่ยวข้องที่นี่เท่านั้น
รูปี


3

การใช้ modal.hide จะซ่อนคำกริยาเท่านั้น หากคุณใช้การซ้อนทับภายใต้คำกริยามันจะยังคงอยู่ ใช้การคลิกเพื่อโทรเพื่อปิด modal และลบภาพซ้อนทับ

$("#modalID .close").click()

3

อีกวิธีหนึ่งในการทำเช่นนี้คือก่อนอื่นคุณจะลบคลาสโมดัล - โอเพ่นซึ่งจะปิดโมดัล จากนั้นคุณจะลบฉากหลังของกิริยาที่เกิดขึ้นซึ่งจะเอาฝาครอบสีเทาออกของกิริยา

รหัสต่อไปนี้สามารถใช้:

$('body').removeClass('modal-open')
$('.modal-backdrop').remove()  

โปรดพยายามหลีกเลี่ยงเพียงแค่ทิ้งรหัสเป็นคำตอบและพยายามอธิบายว่ามันทำอะไรและทำไม รหัสของคุณอาจไม่ชัดเจนสำหรับผู้ที่ไม่มีประสบการณ์การเข้ารหัสที่เกี่ยวข้อง โปรดแก้ไขคำตอบของคุณเพื่อรวมคำอธิบายบริบทและพยายามพูดถึงข้อ จำกัด ข้อสันนิษฐานหรือการทำให้เข้าใจง่ายในคำตอบของคุณ
Frits

ตกลงดังนั้นโดยทั่วไปสิ่งนี้จะลบคลาสโมดัล - เปิดซึ่งปิดคำกริยา จากนั้นจะลบฉากหลังของกิริยาในระดับที่เอาฝาครอบสีเทาออกของกิริยา
Orozcorp

3

ฉันปิดเป็นกิริยาช่วยโดยทางโปรแกรมด้วยเคล็ดลับนี้

เพิ่มปุ่มในกิริยากับและซ่อนปุ่มที่มีdata-dismiss="modal" display: noneนี่คือลักษณะที่ปรากฏ

<div class="modal fade" id="addNewPaymentMethod" role="dialog">
  <div class="modal-dialog">
   .
   .
   .
   <button type="button" id="close-modal" data-dismiss="modal" style="display: none">Close</button>
  </div>
</div>

ตอนนี้เมื่อคุณต้องการปิด modal โดยทางโปรแกรมเพียงแค่ทริกเกอร์คลิกเหตุการณ์บนปุ่มนั้นซึ่งผู้ใช้จะมองไม่เห็น

ใน Javascript คุณสามารถเปิดใช้งานการคลิกที่ปุ่มเช่นนี้:

document.getElementById('close-modal').click();

2

รหัสนี้ทำงานอย่างสมบูรณ์แบบสำหรับฉันที่จะปิด modal (ฉันใช้ bootstrap 3.3)

$('#myModal').removeClass('in')

2

ในกรณีของฉันหน้าหลักจากการที่ bootstrap modal เริ่มทำงานไม่ตอบสนองหลังจากใช้$("#modal").modal('toggle');วิธีการ แต่เริ่มตอบสนองด้วยวิธีต่อไปนี้:

$("#submitBtn").on("click",function(){
  $("#submitBtn").attr("data-dismiss","modal");
});

2

มันใช้งานได้ดี

$(function () {
   $('#modal').modal('toggle');
});

อย่างไรก็ตามเมื่อคุณมีโมเดอเรเตอร์หลายตัวซ้อนทับกันมันจะไม่ได้ผลดังนั้นมันจึงใช้งานได้

data-dismiss="modal"

2

หลังจากการทดสอบบางอย่างผมพบว่าสำหรับบูตจำเป็นกิริยาที่จะรอเวลาก่อนที่จะดำเนินการหลังจากรัน$(.modal).modal('hide') $(.modal).modal('show')และฉันพบว่าในกรณีของฉันฉันต้องการช่วงเวลาอย่างน้อย 500 milisecond ระหว่างสอง
นี่คือกรณีทดสอบและวิธีแก้ปัญหาของฉัน:

$('.modal-loading').modal('show');
setTimeout(function() {
  $('.modal-loading').modal('hide');
}, 500);

สิ่งนี้แก้ปัญหาที่ฉันมีกับโมดอลไม่ได้ปิดในขณะที่ฉันเปิดอีกหนึ่งขอบคุณ
hal9000

2

คุณสามารถดูการอ้างอิงนี้แต่ถ้าลิงค์นี้ถูกลบไปอ่านคำอธิบายนี้:

โทรหา modal ด้วย id myModal ด้วยบรรทัดเดียวของ JavaScript:

$('#myModal').modal(options)

ตัวเลือก

ตัวเลือกสามารถส่งผ่านข้อมูลคุณลักษณะหรือ JavaScript สำหรับแอตทริบิวต์ข้อมูลผนวกชื่อตัวเลือกในการDATA-ในขณะที่ข้อมูลฉากหลัง = ""

|-----------|-------------|--------|---------------------------------------------|
| Name      | Type        | Default| Description                                 |
|-----------|-------------|--------|---------------------------------------------|
| backdrop  | boolean or  | true   | Includes a modal-backdrop element.          |
|           | the string  |        | Alternatively, specify static for a         |
|           | 'static'    |        | backdrop which doesn't close the modal      |
|           |             |        | on click.                                   |
|           |             |        |                                             |
| keyboard  | boolean     | true   | Closes the modal when escape key is pressed.|   
|           |             |        |                                             |
| focus     | boolean     | true   | Puts the focus on the modal when initialized|       
|           |             |        |                                             |
| show      | boolean     | true   | Shows the modal when initialized.           |
|-----------|-------------|--------|---------------------------------------------|

วิธีการ

วิธีการและการเปลี่ยนแปลงแบบอะซิงโครนัส

วิธีการ API ทั้งหมดไม่ตรงกันและเริ่มการเปลี่ยนแปลง พวกเขากลับไปที่ผู้โทรทันทีที่เริ่มต้นการเปลี่ยนแปลง แต่ก่อนที่จะสิ้นสุด นอกจากนี้การเรียกเมธอดบนคอมโพเนนต์การเปลี่ยนแปลงจะถูกละเว้น

ดูเอกสาร JavaScript ของเราสำหรับข้อมูลเพิ่มเติม

.modal (ตัวเลือก)

เปิดใช้งานเนื้อหาของคุณเป็นกิริยาช่วย ยอมรับวัตถุตัวเลือกเพิ่มเติม

$('#myModal').modal({
   keyboard: false
})

.modal ( 'สลับ')

สลับคำกริยาด้วยตนเอง กลับไปที่ผู้โทรก่อนที่จะมีการแสดงหรือซ่อนคำกริยาจริง (เช่นก่อนที่จะมีการแสดงเหตุการณ์

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

.modal ( 'แสดง')

เปิดคำกริยาด้วยตนเอง ส่งกลับไปยังผู้เรียกก่อนที่จะมีการแสดงคำกริยาจริง (เช่นก่อนที่จะเกิดเหตุการณ์

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

.modal ( 'ซ่อน')

ซ่อน modal ด้วยตนเอง กลับสู่ผู้โทรก่อนที่จะมีการซ่อนคำกริยาจริง (เช่นก่อนที่เหตุการณ์ hidden.bs.modal จะเกิดขึ้น)

$('#myModal').modal('hide')

.modal ( 'handleUpdate')

ปรับตำแหน่งของ modal ด้วยตนเองถ้าความสูงของ modal เปลี่ยนแปลงในขณะที่เปิดอยู่ (เช่นในกรณีที่แถบเลื่อนปรากฏขึ้น)

$('#myModal').modal('handleUpdate')

.modal ( 'ทิ้ง')

ทำลายคำกริยาขององค์ประกอบ

เหตุการณ์ที่เกิดขึ้น

คลาสโมดอลของ Bootstrap จะเปิดเผยเหตุการณ์บางอย่างสำหรับการเชื่อมต่อเข้ากับฟังก์ชั่นโมดัล เหตุการณ์โมดัลทั้งหมดจะเริ่มที่โมดัลเอง (เช่นที่ **) พิมพ์คำอธิบาย

|----------------|--------------------------------------------------------------|
| Event Type     | Description                                                  |
|----------------|--------------------------------------------------------------|
| show.bs.modal  | This event fires immediately when the **show** instance      |
|                | method is called. If caused by a click, the clicked element  |
|                | is available as the **relatedTarget** property of the event. | 
|                |                                                              |
| shown.bs.modal | This event is fired when the modal has been made visible to  |
|                | the user (will wait for CSS transitions to complete). If     |
|                | caused by a click, the clicked element is available as the   | 
|                | **relatedTarget** property of the event.                     |
|                |                                                              |
| hide.bs.modal  | This event is fired immediately when the **hide** instance   |
|                | method has been called.                                      |
|                |                                                              |
| hidden.bs.modal| This event is fired when the modal has finished being hidden |
|                | from the user (will wait for CSS transitions to complete).   |
|----------------|--------------------------------------------------------------|

$('#myModal').on('hidden.bs.modal', function (e) {
  // do something...
})

0

นอกจากนี้คุณสามารถ "คลิก" ที่ 'x' ซึ่งจะปิดกล่องโต้ตอบ เช่น:

$(".ui-dialog-titlebar-close").click();


0

ในกรณีของฉันฉันใช้ปุ่มเพื่อแสดงคำกริยา

<button type="button" class="btn btn-success" style="color:white"
    data-toggle="modal" data-target="#my-modal-to-show" >
    <i class="fas fa-plus"></i> Call MODAL
</button>

ดังนั้นในรหัสของฉันเพื่อปิด modal (ที่มี id = 'my-modal-to-show') ฉันเรียกใช้ฟังก์ชันนั้น (ใน Angular typescript):

closeById(modalId: string) {
  $(modalId).modal('toggle');
  $(modalId+ ' .close').click();
}

ถ้าฉันโทร $ (modalId) .modal ('ซ่อน') มันไม่ทำงานและฉันไม่รู้ว่าทำไม

ป.ล. : ในคำกริยาของฉันฉันเขียนองค์ประกอบปุ่มที่มี. ปิดชั้นด้วย

<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
    <span aria-hidden="true">&times;</span>
</button>

0

บางครั้งการแก้ปัญหาทำงานไม่ได้ดังนั้นคุณต้องลบในชั้นเรียนอย่างถูกต้องและเพิ่มการแสดง css: ไม่มีด้วยตนเอง

$("#modal").removeClass("in");
$("#modal").css("display","none");
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.