Gọi một chức năng trên phương thức bootstrap mở


179

Tôi đã từng sử dụng hộp thoại của JQuery UI và nó có opentùy chọn, nơi bạn có thể chỉ định một số mã Javascript để thực thi khi hộp thoại được mở. Tôi đã sử dụng tùy chọn đó để chọn văn bản trong hộp thoại bằng chức năng tôi có.

Bây giờ tôi muốn làm điều đó bằng cách sử dụng phương thức của bootstrap. Dưới đây là mã 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'

Và đối với nút mở chế độ:

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

Tôi đã cố gắng sử dụng một trình nghe onclick của nút, nhưng thông báo cảnh báo đã được hiển thị trước khi phương thức xuất hiện:

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

3
shown.bs.modalsự kiện xảy ra khi tài liệu HTML chứa ít nhất <div class="modal fade"><div class="modal-dialog"></div></div>cấu trúc.
Lập trình viên hóa học


Hãy bình luận @ Lập trình viên hóa học, nó sẽ xuất hiện với câu trả lời
Tarek

Câu trả lời:


331

Bạn có thể sử dụng sự kiện được hiển thị / sự kiện hiển thị dựa trên những gì bạn cần:

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

Bản trình diễn: Plunker

Cập nhật cho Bootstrap 3.0

Đối với Bootstrap 3.0, bạn vẫn có thể sử dụng sự kiện được hiển thị nhưng bạn sẽ sử dụng nó như thế này:

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

Xem tài liệu Bootstrap 3.0 tại đây trong "Sự kiện".


17
Sử dụng $("#code").on("shown.bs.modal", function(e) {})cho bootstrap 3.0.
teewuane

đảm bảo tính đến những gì Lập trình viên hóa học nói về việc cần cấu trúc <div class = "modal fade"> <div class = "modal-đàm thoại"> </ div> </ div> ít nhất để mã này được gọi
tại sao

1
Tham chiếu #codeđến bộ chọn jQuery, một trong những thành phần cơ bản cho jQuery: w3schools.com/jquery/jquery_selector.asp
DdW

Tôi sử dụng $(document).on("shown.bs.modal", ...để nghe tổng thể
vladkras

1
Ít nhất là shows.bs.modal thực sự thực thi trước khi phương thức được hiển thị. Đây không phải là một vấn đề trong trường hợp của tôi, nhưng có thể là tốt để biết.
Jonny

86

sẽ không hoạt động .. sử dụng $(window) thay thế

Để hiển thị

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

Để che giấu

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

5
$ ("#modal") .on ('đã hiển thị', function () {alert ("Tôi muốn nó xuất hiện sau khi phương thức đã mở!");} Không hoạt động với tôi nhưng $ (window) đã hoạt động !! Cảm ơn @viper_tkd
Krutal Modi

1
Tôi cần liên kết với BẤT K mod phương thức nào đã mở / đóng, và không phải bởi một bộ chọn cụ thể. Câu trả lời này đã làm việc tốt cho tôi trong trường hợp đó.
jyoseph

Điều này hoạt động trước khi phương thức được tải đầy đủ trên GUI. Tôi muốn lấy dữ liệu từ phương thức của mình sau khi phương thức được tải - phương thức này trả về 'không xác định' cho mọi thứ vì GUI phương thức chưa tồn tại, vì vậy các trường và mọi thứ khác chưa thể truy vấn được. (không hiển thị)
FrenkyB

Điều này làm việc cho tôi, nhưng tôi đã thêm một kiểm tra trong trình xử lý để nhắm mục tiêu một phương thức cụ thể: if( $('#code').is( e.relatedTarget ) ) { ... }vì tôi có nhiều trên trang.
allicarn

Cảm ơn vì tên sự kiện chính xác, nhưng, không cần thay thế ID phần tử cho $ (cửa sổ). Sử dụng bs4 với jquery 3.4.
Jcc.Sanabria

17

bạn có thể sử dụng showthay vì shownđể thực hiện chức năng tải ngay trước khi mở chế độ, thay vì sau khi mở chế độ.

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

9

Phương thức Bootstrap phơi bày các sự kiện. Nghe shownsự kiện như thế này

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

0

nếu ai đó vẫn gặp sự cố, điều duy nhất hoạt động hoàn hảo với tôi bằng cách sử dụng (oad.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

Bạn có thể sử dụng mã belw để hiển thị và ẩn mô hình bootstrap.

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

và nếu bạn muốn ẩn mô hình thì bạn có thể sử dụng mã bên dưới.

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

Tôi hy vọng câu trả lời này hữu ích cho dự án của bạn.


7
copycat một lần nữa ... xem câu trả lời khác của người dùng
Laurent B
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.