Liên kết một chức năng với Twitter Bootstrap Modal Đóng


530

Tôi đang sử dụng lib Bootstrap của Twitter trong một dự án mới và tôi muốn một phần của trang để làm mới và truy xuất dữ liệu json mới nhất về chế độ đóng. Tôi không thấy điều này ở bất cứ đâu trong tài liệu có thể ai đó chỉ ra cho tôi hoặc đề xuất một giải pháp.

Hai vấn đề với việc sử dụng các phương pháp tài liệu

 $('#my-modal').bind('hide', function () {
   // do something ...
 });

Tôi đã đính kèm một lớp "ẩn" với phương thức đã có để nó không hiển thị khi tải trang để có thể tải hai lần

ngay cả khi tôi loại bỏ lớp ẩn và đặt id phần tử thành display:nonevà thêm console.log("THE MODAL CLOSED");vào hàm ở trên khi tôi nhấn gần thì không có gì xảy ra.

Câu trả lời:


1138

Bootstrap 3 & 4

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

Bootstrap 3: getbootstrap.com/javascript/#modals-events

Bootstrap 4: getbootstrap.com/docs/4.1/components/modal/#events

Bootstrap 2.3.2

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

Xem getbootstrap.com/2.3.2/javascript.html#modals → Sự kiện


1
Điều này dường như hoạt động ngoại trừ, vì một số lý do, khi di chuột qua một nút trong chân trang phương thức, nó cũng kích hoạt. Nút này là nút gửi thông thường: <input type = "submit" class = "btn btn-information" value = "Go" /> Bạn có biết làm thế nào để không có sự kiện ẩn lửa khi di chuột qua nó không? Hoặc, làm thế nào tôi có thể phát hiện ra rằng nó đã bị bắn vì di chuột? BTW: ngay cả khi sự kiện được kích hoạt, hộp thoại phương thức không đóng.
Guy

2
Tôi không thấy hành vi này với Bootstrap 3, bạn có thể tạo ra một câu đố không?
sp00n

7
Câu trả lời này có lẽ nên đề cập đến sự khác biệt giữa hidden.bs.modal và hide.bs.modal. Ẩn được kích hoạt khi hoạt ảnh CSS hoàn tất, nhưng trong thử nghiệm của tôi nếu không có hoạt ảnh, nó không bao giờ kích hoạt (mặc dù chỉ có thể là một lỗi). Nếu bạn đang làm việc với quản lý dữ liệu, có thể an toàn hơn khi sử dụng hide.bs.modal, được kích hoạt ngay khi .modal ('ẩn') được gọi. getbootstrap.com/javascript/#modals-usage - Xem tiểu mục Sự kiện.
Evan Steinkerchner

2
Bootstrap 3: Nó hoạt động khi tôi nhấp vào thẻ phương thức được đánh dấu là data-dismiss="modal"(giống như nút đóng), nhưng nó không hoạt động khi tôi nhấp vào khu vực nền đen xung quanh phương thức. Phương thức bị loại bỏ nhưng sau đó không thể mở lại cho đến khi trang được làm mới. Tôi đã thử cả hai 'hidden.bs.modal''hide.bs.modal'vô ích.
muỗi 19/2/2015

5
@marquito Những gì bạn có thể làm (những gì tôi làm) là sử dụng nó như thế này: $('#myModal').modal({ backdrop: 'static', keyboard: false });Bằng cách đó, phương thức sẽ không đóng khi nhấp vào vùng màu xám, cũng như khi nhấn phím Esc.
aesede

123

Bootstrap 4

$('#my-modal').on('hidden.bs.modal', function () {
  window.alert('hidden event fired!');
});

Xem JSFiddle này để biết ví dụ hoạt động:

https://jsfiddle.net/6n7bg2c9/

Xem phần Sự kiện Modal của các tài liệu ở đây:

https://getbootstrap.com/docs/4.3/components/modal/#events


1
Đối với bất kỳ ai tìm thấy bài đăng này muốn thực hiện loại gọi lại này, có một mô-đun mở rộng cho Bootstrap bao gồm chức năng này cũng như rất nhiều chức năng hữu ích khác để tạo động các hộp thoại / cảnh báo / xác nhận: bootboxjs.com
jkriddle

Phản hồi của @Ricardo Lima dưới đây hiện là phương pháp chính xác để theo dõi các sự kiện trong jQuery / bootstrap
sbonami

@meatballs vẫn bỏ phiếu cho ví dụ hoạt động..tất cả mặc dù ràng buộc đã bị phản đối.
Stephen Patten

@ 100acrewood Dude, bây giờ là một tìm kiếm! Cảm ơn bạn! re: bootboxjs.com
Stephen Patten

46

Bắt đầu Bootstrap 3 ( chỉnh sửa: vẫn giống trong Bootstrap 4 ), có 2 trường hợp bạn có thể khởi động các sự kiện, đó là:

1. Khi sự kiện "ẩn" phương thức bắt đầu

$('#myModal').on('hide.bs.modal', function () { 
    console.log('Fired at start of hide event!');
});  

2. Khi sự kiện "ẩn" kết thúc

$('#myModal').on('hidden.bs.modal', function () {
    console.log('Fired when hide event has finished!');
});

Tham chiếu: http://getbootstrap.com/javascript/#js-events


1
Điều này đã giúp tôi sửa lỗi phương thức Bootstrap của mình, nơi nó sẽ thêm 15px padding-right vào phần thân của bất kỳ phương thức nào. Cảm ơn!
Sam Malayek

2
Tốt cho hiển thị 2 sự kiện. Tốt hơn cho những người mới bắt đầu như tôi lưu ý rằng điều này cần phải được đặt bên dưới phương thức cho sự kiện được tổ chức.
Lynnell Emmanuel Neri

18

Thay vì "trực tiếp", bạn cần sử dụng sự kiện "bật", nhưng gán nó cho đối tượng tài liệu:

Sử dụng:

$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});

1
Đây là cách bạn phải làm nếu phương thức được thêm động. Tiết kiệm cho tôi một tấn thời gian.
Dylan Vander Berg

15
$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});

6

Bootstrap cung cấp các sự kiện mà bạn có thể kết nối thành phương thức , như nếu bạn muốn kích hoạt một sự kiện khi phương thức kết thúc bị ẩn khỏi người dùng, bạn có thể sử dụngsự kiện hidden.bs.modal như thế này

    /* hidden.bs.modal event example */
    $('#myModal').on('hidden.bs.modal', function () {
          window.alert('hidden event fired!');
    })

Kiểm tra một câu đố làm việc ở đây đọc thêm về các phương thức và sự kiện phương thức ở đây trong Tài liệu


4

Bootstrap 4:

$('#myModal').on('hidden.bs.modal', function (e) {
   // call your method
})

hide.bs.modal : Sự kiện này được kích hoạt ngay lập tức khi phương thức ẩn đã được gọi.

hidden.bs.modal : Sự kiện này được kích hoạt khi phương thức kết thúc bị ẩn khỏi người dùng (sẽ đợi quá trình chuyển đổi CSS hoàn tất).


Cách này cũng hợp lệ đối với BS3. Xin vui lòng xem câu trả lời được chấp nhận cho cách BS2 (không dùng nữa).
Roland

3

Tôi sẽ làm như thế này:

$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });

Phần còn lại đã được viết bởi những người khác. Tôi cũng khuyên bạn nên đọc tài liệu: jquery - về phương pháp


2

Tôi đã thấy nhiều câu trả lời liên quan đến các sự kiện bootstrap như hide.bs.modalkích hoạt khi chế độ đóng.

Có một vấn đề với những sự kiện đó: bất kỳ cửa sổ bật lên nào trong phương thức (cửa sổ bật lên, chú giải công cụ, v.v.) sẽ kích hoạt sự kiện đó.

Có một cách khác để bắt sự kiện khi một phương thức đóng cửa.

$(document).on('hidden','#modal:not(.in)', function(){} );

Bootstrap sử dụng inlớp khi phương thức được mở. Điều rất quan trọng là sử dụng hiddensự kiện vì lớp invẫn được xác định khi sự kiện hideđược kích hoạt.

Giải pháp này sẽ không hoạt động trong IE8 vì IE8 không hỗ trợ :not()bộ chọn Jquery .


2

Tôi đã có những vấn đề tương tự như một số với

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

Bạn cần đặt nó ở dưới cùng của trang, đặt nó ở đầu trang không bao giờ kích hoạt sự kiện.


Thật. Thật tốt khi bạn đề cập rằng nó cần được đặt ở bên dưới phương thức để tổ chức sự kiện.
Lynnell Emmanuel Neri

Tôi sẽ xác định các quy tắc chặt chẽ hơn một chút. Khi bộ chọn jQuery $("#myModal")được gọi, phần tử HTML có ID myModalcần tồn tại trong DOM. Vì vậy, bạn có thể có mã này ở đầu trang nhưng được đặt trong một $(document).on("ready", function(){ ... });(hoặc chức năng tương tự được gọi sau khi DOM được điền với phần tử).
Andy Gee

0

Nếu bạn muốn kích hoạt một chức năng trên mỗi chế độ đóng, bạn có thể sử dụng phương thức này,

$(document).ready(function (){
    $('.modal').each(function (){
        $(this).on('hidden.bs.modal', function () {
            //fires when evey popup close. Ex. resetModal();
        });
    });
});

Vì vậy, bạn không cần chỉ định id phương thức mỗi lần.

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.