Виклик функції в режимі завантаження модально відкритим


179

Раніше я користувався діалоговим вікном інтерфейсу JQuery, і він мав openопцію, де можна вказати якийсь код Javascript, який потрібно виконати після відкриття діалогового вікна. Я б використав цю опцію для вибору тексту в діалоговому вікні, використовуючи функцію, яку я маю.

Тепер я хочу це зробити, використовуючи модаль завантаження. Нижче наведено код 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>

Я спробував використати прослуховувач кнопки onclick, але повідомлення попередження відображалося ще до появи модалу:

$( ".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>структуру.
Хімічний програміст


Вітайте коментар @Chemical Programmer, це повинно з’явитися з відповіддю
Тарек

Відповіді:


331

Ви можете використовувати показану подію / подію на основі того, що вам потрібно:

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

Демо: Plunker

Оновлення для Bootstrap 3.0

Для Bootstrap 3.0 ви все ще можете використовувати показану подію, але ви будете використовувати її так:

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

Дивіться документи Bootstrap 3.0 тут у розділі "Події".


17
Використовуйте $("#code").on("shown.bs.modal", function(e) {})для завантажувальної версії 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
Принаймні показаний.bs.modal фактично виконується до модального відображення. У моєму випадку це не проблема, але, можливо, варто знати.
Джоні

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 ("Я хочу, щоб це з’явилося після відкриття модалу!");} не працювало для мене, але $ (вікно) працювало !! Спасибі @viper_tkd
Krutal Modi

1
Мені потрібно було прив’язати будь-який модальний режим, який відкривався / закривався, а не конкретним селектором. Ця відповідь спрацювала для мене добре в тому випадку.
jyoseph

Це працює, перш ніж модаль повністю завантажується на GUI. Я хочу взяти дані з модального модуля після завантаження модалу - цей метод повертає "невизначений" для всього, оскільки модальний графічний інтерфейс ще не існує, тому поля та все інше ще не підлягають запиту. (не видно)
FrenkyB

Це працювало для мене, але я додав чек всередині обробника, щоб націлити один конкретний модал: if( $('#code').is( e.relatedTarget ) ) { ... }оскільки я мав декілька на сторінці.
allicarn

Дякуємо за правильну назву події, але не потрібно замінювати ідентифікатор елемента на $ (вікно). Використання bs4 з jquery 3.4.
Jcc.Sanabria

17

ви можете використовувати showзамість того, shownщоб зробити функцію для завантаження безпосередньо перед модальним відкриттям, а не після модального відкритого.

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

9

Модальний завантажувач розкриває події. Слухайте 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
copycat знову ... дивіться інші відповіді користувача
Лоран Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.