การเรียกฟังก์ชันบน bootstrap modal open


179

ฉันเคยใช้กล่องโต้ตอบของ JQuery UI และมีopenตัวเลือกที่คุณสามารถระบุรหัส Javascript เพื่อเรียกใช้งานได้เมื่อเปิดกล่องโต้ตอบ ฉันจะใช้ตัวเลือกนั้นเพื่อเลือกข้อความภายในกล่องโต้ตอบโดยใช้ฟังก์ชั่นที่ฉันมี

ตอนนี้ฉันต้องการทำสิ่งนั้นโดยใช้คำสั่ง bootstrap ด้านล่างคือรหัส HTMl:

<div id="code" class="modal hide fade">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h3>Modal header</h3>
    </div>
    <div class="modal-body">
        <pre>
print 'Hello World'

และสำหรับปุ่มที่เปิดเป็นกิริยาช่วย:

 <a href="#code" data-toggle="modal" class="btn code-dialog">Display code</a>

ฉันพยายามใช้ฟังของปุ่ม แต่ข้อความแจ้งเตือนปรากฏขึ้นก่อนที่คำกริยาจะปรากฏขึ้น:

$( ".code-dialog" ).click(function(){
    alert("I want this to appear after the modal has opened!");
});

3
shown.bs.modalเหตุการณ์เกิดขึ้นเมื่อเอกสาร HTML มี<div class="modal fade"><div class="modal-dialog"></div></div>โครงสร้างอย่างน้อยที่สุด
โปรแกรมเมอร์เคมี


แสดงความคิดเห็น @ โปรแกรมเมอร์เคมีควรปรากฏพร้อมคำตอบ
Tarek

คำตอบ:


331

คุณสามารถใช้เหตุการณ์ที่แสดง / เหตุการณ์การแสดงขึ้นอยู่กับสิ่งที่คุณต้องการ:

$( "#code" ).on('shown', function(){
    alert("I want this to appear after the modal has opened!");
});

การสาธิต: พลั่ว

อัพเดตสำหรับ Bootstrap 3.0

สำหรับ Bootstrap 3.0 คุณยังสามารถใช้เหตุการณ์ที่แสดง แต่คุณจะใช้มันดังนี้:

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

ดู Bootstrap 3.0 docs ที่นี่ภายใต้ "กิจกรรม"


17
ใช้$("#code").on("shown.bs.modal", function(e) {})สำหรับ bootstrap 3.0
teewuane

ตรวจสอบให้แน่ใจว่าคำนึงถึงสิ่งที่โปรแกรมเมอร์เคมีกล่าวเกี่ยวกับการต้องการ <div class = "modal fade"> <div class = "modal-dialog"> </div> </div> โครงสร้างอย่างน้อยเพื่อให้โค้ดนี้ถูกเรียก
Whyoz

1
การ#codeอ้างอิงถึงตัวเลือก jQuery ซึ่งเป็นหนึ่งในส่วนผสมพื้นฐานสำหรับ jQuery: w3schools.com/jquery/jquery_selectors.asp
DdW

ฉันใช้$(document).on("shown.bs.modal", ...สำหรับการฟังโดยรวม
vladkras

1
อย่างน้อยแสดงให้เห็น. mbbmodal ดำเนินการจริงก่อนที่จะแสดงคำกริยา นี่ไม่ใช่ปัญหาในกรณีของฉัน แต่อาจจะดีที่จะรู้
Jonny

86

จะไม่ทำงาน .. ใช้$(window)แทน

สำหรับการแสดง

$(window).on('shown.bs.modal', function() { 
    $('#code').modal('show');
    alert('shown');
});

สำหรับการซ่อน

$(window).on('hidden.bs.modal', function() { 
    $('#code').modal('hide');
    alert('hidden');
});

5
$ ("#modal") .on ('แสดง', ฟังก์ชั่น () {alert ("ฉันต้องการให้มันปรากฏหลังจาก modal เปิด!");} ไม่ทำงานสำหรับฉัน แต่ $ (หน้าต่าง) ทำงาน !! ขอบคุณ @viper_tkd
Krutal Modi

1
ฉันต้องการผูกกับmodal ใด ๆที่เปิด / ปิดไม่ใช่โดยตัวเลือกเฉพาะ คำตอบนี้ใช้ได้ดีสำหรับฉันในกรณีนั้น
jyoseph

วิธีนี้ใช้ได้ก่อนที่จะมีการโหลด modal บน GUI ฉันต้องการนำข้อมูลจาก modal ของฉันหลังจากที่โหลด modal แล้ว - วิธีนี้จะส่งกลับ 'ไม่ได้กำหนด' สำหรับทุกอย่างเพราะ modal GUI ยังไม่มีอยู่ดังนั้นฟิลด์และทุกอย่างอื่นยังไม่สามารถสืบค้นได้ (มองไม่เห็น)
FrenkyB

สิ่งนี้ทำงานได้สำหรับฉัน แต่ฉันได้เพิ่มการตรวจสอบภายในตัวจัดการเพื่อกำหนดเป้าหมายหนึ่ง modal เฉพาะ: if( $('#code').is( e.relatedTarget ) ) { ... }เนื่องจากฉันมีหลายในหน้า
allicarn

ขอบคุณสำหรับชื่อเหตุการณ์ที่ถูกต้อง แต่ไม่จำเป็นต้องแทนที่ ID องค์ประกอบสำหรับ $ (หน้าต่าง) ใช้ bs4 กับ jQuery 3.4
Jcc.Sanabria

17

คุณสามารถใช้showแทนshownการทำให้ฟังก์ชั่นโหลดก่อนที่จะเปิดเป็นกิริยาช่วยแทนหลังจากที่เปิดเป็นกิริยาช่วย

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

9

Bootstrap modal ทำให้เกิดเหตุการณ์ ฟังshownเหตุการณ์เช่นนี้

$('#my-modal').on('shown', function(){
  // code here
});

0

หากใครบางคนยังคงมีปัญหาสิ่งเดียวที่ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันโดยใช้ (load.bs.modal):

 $('#editModal').on('loaded.bs.modal', function () {
       console.log('edit modal loaded');

       $('.datepicker').datepicker({
            dateFormat: 'yy-mm-dd',
            clearBtn: true,
            rtl: false,
            todayHighlight: true,
            toggleActive: true,
            changeYear: true,
            changeMonth: true
        });
});

-4

คุณสามารถใช้รหัส belw สำหรับการแสดงและซ่อนโมเดลบูตสแตรป

$('#my-model').on('shown.bs.modal', function (e) {
  // do something here...
})

และถ้าคุณต้องการซ่อนโมเดลคุณสามารถใช้โค้ดด้านล่างได้

$('#my-model').on('hidden.bs.modal', function() {
    // do something here...
});

ฉันหวังว่าคำตอบนี้มีประโยชน์สำหรับโครงการของคุณ


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