จะจัดการกับเหตุการณ์ปิดคำสั่งใน Twitter Bootstrap ได้อย่างไร


191

ใน Twitter bootstrap ดูที่เอกสารคู่มือ modals ฉันไม่สามารถเข้าใจได้ว่ามีวิธีฟังเหตุการณ์ปิดของคำกริยาและเรียกใช้ฟังก์ชันหรือไม่

เช่นให้ใช้คำกริยานี้เป็นตัวอย่าง:

<div class="modal-header">
    <button type="button" class="close close_link" data-dismiss="modal" aria-hidden="true">&times;</button>
    <h3>Modal header</h3>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
    <a href="#" class="btn close_link" data-dismiss="modal">Close</a>   
</div>

ปุ่ม X ที่ด้านบนและปุ่มปิดที่ด้านล่างสามารถซ่อน / ปิดคำกริยาdata-dismiss="modal"ได้ ดังนั้นฉันสงสัยว่าถ้าฉันสามารถฟังอย่างนั้น?

อีกทางหนึ่งฉันสามารถทำได้ด้วยตนเองเช่นนี้ฉันเดา ...

$("#salesitems_modal").load(url, data, function() { 
     $(this).modal('show'); 
     $(this).find(".close_link").click(modal_closing);
});

คุณคิดอย่างไร?


2
อาจเป็นไปได้ซ้ำของการผูกฟังก์ชันกับ Twitter Bootstrap Modal Close
Salvador Dali

คำตอบ:


370

อัพเดตสำหรับ Bootstrap 3 และ 4

Bootstrap 3และBootstrap 4 docs อ้างถึงสองเหตุการณ์ที่คุณสามารถใช้ได้

hide.bs.modal : เหตุการณ์นี้เกิดขึ้นทันทีเมื่อมีการเรียกใช้วิธีการซ่อนอินสแตนซ์
hidden.bs.modal : เหตุการณ์นี้เกิดขึ้นเมื่อ modal เสร็จสิ้นการซ่อนจากผู้ใช้ (จะรอให้การเปลี่ยน CSS เสร็จสมบูรณ์)

และให้ตัวอย่างเกี่ยวกับวิธีใช้:

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

Legacy Bootstrap 2.3.2 คำตอบ

เอกสารประกอบของ Bootstrapหมายถึงสองเหตุการณ์ที่คุณสามารถใช้ได้

ซ่อน : เหตุการณ์นี้เกิดขึ้นทันทีเมื่อมีการเรียกใช้วิธีการซ่อนอินสแตนซ์
hidden : เหตุการณ์นี้เกิดขึ้นเมื่อ modal เสร็จสิ้นการซ่อนจากผู้ใช้ (จะรอให้การเปลี่ยน css เสร็จสมบูรณ์)

และให้ตัวอย่างเกี่ยวกับวิธีใช้:

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

1
ด้วยเหตุผลบางอย่างนี่เป็นการยิงสำหรับฉันเช่นกันเมื่อฉันวางเมาส์บนปุ่มที่มีอยู่ในกิริยาช่วย และเมื่อฉันส่งแบบฟอร์มเป็นกิริยาช่วย (ก่อนที่เหตุการณ์ onSubmit จะยิง) ใครรู้วิธีหยุดพฤติกรรมนี้
Guy

2
เพื่อให้บริบทเพิ่มเติมบางอย่างฉันขอแนะนำให้ใช้ $ (เอกสาร) .on ('ซ่อน', '#myModal', function () {// do something}); เพื่อป้องกันไม่ให้สิ่งนี้ไม่ทำงานในบางสถานการณ์เช่นเมื่อสิ่งนี้มีอยู่ภายใน $ (เอกสาร) การประกาศฟังก์ชัน. ready
Gareth Daine

สวัสดีฉันต้องการที่จะใช้ jquery ที่ซ่อนอยู่กิริยา และฉันใช้รหัสเดียวกันในโครงการของฉัน แต่มันไม่ทำงาน คุณมีข้อเสนอแนะสำหรับสิ่งเดียวกันหรือไม่?
Hardi Shah

@HardiShah คุณควรถามคำถามใหม่ซึ่งรวมถึงรหัสและ / หรือข้อผิดพลาดของคุณ
albertedevigo

68

หาก dival ของคุณถูกเพิ่มเข้ามาแบบไดนามิกให้ใช้ (สำหรับ bootstrap 3)

$(document).on('hide.bs.modal','#modal-id', function () {
                alert('');
 //Do stuff here
});

สิ่งนี้จะใช้งานได้กับเนื้อหาที่ไม่ใช่แบบไดนามิกด้วย


ข้อแตกต่างระหว่าง hide vs hidden?
Mahi

3
เหตุการณ์ @mahi .hide ถูกเรียกใช้ทันทีเมื่อมีการเรียกใช้วิธีการซ่อนอินสแตนซ์ ในขณะที่เหตุการณ์ที่ซ่อนอยู่ถูกไล่ออกเมื่อ modal เสร็จสิ้นการถูกซ่อนจากผู้ใช้ (จะรอให้การเปลี่ยน CSS เสร็จสมบูรณ์)
สับสน

18

มีเหตุการณ์กิริยาสองคู่หนึ่งเหตุการณ์คือ "แสดง" และ "แสดง" อีกเหตุการณ์หนึ่งคือ "ซ่อน" และ "ซ่อน" อย่างที่คุณเห็นจากชื่อให้ซ่อนเหตุการณ์ที่เกิดขึ้นเมื่อ modal ใกล้จะปิดเช่นคลิกที่กากบาทที่มุมบนขวาหรือปุ่มปิดเป็นต้น ในขณะที่ซ่อนถูกไล่ออกหลังจากที่เป็นกิริยาช่วยปิดจริง คุณสามารถทดสอบเหตุการณ์เหล่านี้ด้วยตนเอง สำหรับ exampel:

$( '#modal' )
   .on('hide', function() {
       console.log('hide');
   })
   .on('hidden', function(){
       console.log('hidden');
   })
   .on('show', function() {
       console.log('show');
   })
   .on('shown', function(){
      console.log('shown' )
   });

และสำหรับคำถามของคุณฉันคิดว่าคุณควรฟังเหตุการณ์ 'ซ่อน' ของคำกริยาของคุณ


1

Bootstrap Modal Events:

  1. hide.bs.modal => เกิดขึ้นเมื่อ modal กำลังจะถูกซ่อน
  2. hidden.bs.modal => เกิดขึ้นเมื่อ modal ถูกซ่อนอย่างสมบูรณ์ (หลังจากการเปลี่ยน CSS เสร็จสมบูรณ์)
<script type="text/javascript">
    $("#salesitems_modal").on('hide.bs.modal', function () {
        //actions you want to perform after modal is closed.
    });
</script>

ฉันหวังว่านี่จะช่วยได้

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