Я использую Twitter Bootstrap lib для нового проекта, и я хочу, чтобы часть страницы обновляла и извлекала последние json-данные о модальном закрытии. Я не вижу этого нигде в документации, может кто-нибудь указать мне на это или предложить решение.
Две проблемы с использованием документированных методов
$('#my-modal').bind('hide', function () {
// do something ...
});
Я присоединяю класс "скрыть" к модальному уже так, чтобы он не отображался при загрузке страницы, чтобы он дважды загружал
даже если я удаляю класс hide и устанавливаю идентификатор элемента display:none
и добавляю console.log("THE MODAL CLOSED");
к функции выше, когда я нажимаю, ничего не происходит.
Ответ 1
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…
});
См. getbootstrap.com/2.3.2/javascript.html#modals → События
Ответ 2
Бутстрап 4
$('#my-modal').on('hidden.bs.modal', function () {
window.alert('hidden event fired!');
});
Посмотрите этот JSFiddle для рабочего примера:
https://jsfiddle.net/6n7bg2c9/
Смотрите раздел модальных событий в документации здесь:
https://getbootstrap.com/docs/4.3/components/modal/#events
Ответ 3
Запуск Bootstrap 3 (edit: все еще то же самое в Bootstrap 4) есть 2 экземпляра, в которых вы можете запускать события,:
1. Когда модальное событие "скрыть" начинается
$('#myModal').on('hide.bs.modal', function () {
console.log('Fired at start of hide event!');
});
2. Когда модальное событие "скрыть" завершено
$('#myModal').on('hidden.bs.modal', function () {
console.log('Fired when hide event has finished!');
});
Ссылка: http://getbootstrap.com/javascript/#js-events
Ответ 4
Вместо "живого" вам нужно использовать событие "on", но назначьте его объекту документа:
Использование:
$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});
Ответ 5
$(document.body).on('hidden.bs.modal', function () {
$('#myModal').removeData('bs.modal')
});
Ответ 6
Bootstrap предоставляет события, которые вы можете подключить к модалу, например, если вы хотите запустить событие, когда модал завершил скрытие от пользователя, вы можете использовать событие hidden.bs.modal, например:
/* hidden.bs.modal event example */
$('#myModal').on('hidden.bs.modal', function () {
window.alert('hidden event fired!');
})
Проверьте рабочую скрипку здесь, узнайте больше о модальных методах и событиях здесь, в Документации.
Ответ 7
Bootstrap 4:
$('#myModal').on('hidden.bs.modal', function (e) {
// call your method
})
hide.bs.modal: это событие вызывается сразу после вызова метода экземпляра скрытия.
hidden.bs.modal: это событие вызывается, когда модал завершил скрытие от пользователя (будет ожидать завершения переходов CSS).
Ответ 8
Я видел много ответов относительно событий бутстрапа, таких как hide.bs.modal
, который запускается, когда модальный закрывается.
Проблема с этими событиями: любые всплывающие окна в модальном (popovers, всплывающие подсказки и т.д.) вызовут это событие.
Есть еще один способ поймать событие, когда модальный закрывается.
$(document).on('hidden','#modal:not(.in)', function(){} );
Bootstrap использует класс in
, когда модаль открыт.
Очень важно использовать событие hidden
, так как класс in
все еще определен, когда запускается событие hide
.
Это решение не будет работать в IE8, поскольку IE8 не поддерживает селектор JQuery :not()
.
Ответ 9
У меня были те же проблемы, что и у некоторых с
$('#myModal').on('hidden.bs.modal', function () {
// do something… })
Вам нужно разместить это в нижней части страницы, поместив его наверху, никогда не запускает событие.
Ответ 10
Я прыгаю сюда очень поздно, но для людей, использующих модальность Bootstrap с помощью React, я использовал MutationObserver для обнаружения изменений в модальной видимости и при правильной настройке состояния - этот метод может применяться для запуска любой функции при закрытии модальности:
//react stuff
componentDidMount: function() {
var self = this;
$(function() {
$("#example_modal").addClass('modal');
//use MutationObserver to detect visibility change
//reset state if closed
if (MutationObserver) {
var observer = new MutationObserver(function(mutations) {
//use jQuery to detect if element is visible
if (!$('#example_modal').is(':visible')) {
//reset your state
self.setState({
thingone: '',
thingtwo: ''
});
}
});
var target = document.querySelector('#example_modal');
observer.observe(target, {
attributes: true
});
}
});
}
Для тех, кто интересуется современной поддержкой браузера, CanIUse имеет покрытие MutationObserver на около 87%
Надеюсь, что это поможет кому-то:)
Приветствия,
Джейк
Ответ 11
jQuery bind
и on
, где не срабатывает, когда модаль закрывается. У меня был больше успеха с live:
$('#my-modal').live('hidden', function(e) {
// do something
});
Ответ 12
Я бы сделал это так:
$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });
Остальное уже написано другими. Я также рекомендую прочитать документацию: jquery - по методу