Закрийте режим завантаження


432

У мене є модальне діалогове вікно завантаження, яке я хочу показати спочатку, потім, коли користувач натискає сторінку, воно зникає. У мене є таке:

$(function () {
   $('#modal').modal(toggle)
});

 <div class="modal" id='modal'>
     <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Error:</h3>
        </div>
        <div class="modal-body">
        <p>Please correct the following errors:</p>
        </div>
     </div>
 </div>

Модальний параметр відображається спочатку, але він не закривається при натисканні назовні поза модальним. Крім того, область вмісту не затьмарена. Як я можу отримати модальне відображення спочатку, а потім закрити після того, як користувач натисне за межі області? І як я можу отримати сірий фон, як у демонстрації?


Ви ініціалізуєте свій модальний засіб з $("#yourModal").modal()або $('.modal').modal()?
мерв

Додано більше контексту вище. Дякую за будь-які ідеї @merv!
Нік Б

так ... це показало проблему. @Tamil має ваше рішення.
мерв

Відповіді:


706

Поставте modal('toggle')замістьmodal(toggle)

$(function () {
   $('#modal').modal('toggle');
});

5
Включити "тумблер" взагалі є неправдивим. Просто переконайтеся, що у модальному розділі немає класу «приховати». Але так, помилка друкувала проблему. так +1
мерв

22
ні, він не працює за призначенням, він приховує модальний елемент, але елемент накладення фону все ще існує, слід використовувати рішення @Subodth.
Парик Тіварі

1
@Pierre - розгляньте питання про видалення коментаря, .modal (). Hid () - це не те саме .modal ('приховати'), ви збираєтесь плутати людей.
Майкл Петерсон

2
Як сказав Парік, правильною відповіддю є модальний ('ховати')
MidouCloud,

Це НЕ правильна відповідь, перевірте відповідь нижче!
користувач1467439

412

щоб закрити завантажувальний модальний модуль, ви можете передати "сховати" як варіант модальному методу, як описано нижче

$('#modal').modal('hide');

Ознайомтесь із робочою скрипкою тут

bootstrap також надає події, які ви можете підключити до модальної функціональності, наприклад, якщо ви хочете запустити подію, коли модал закінчився прихованим від користувача, ви можете використовувати події hidden.bs.modal, ви можете прочитати більше про модальні методи та події тут у Документація

Якщо жоден з перерахованих вище методів не працює, введіть ідентифікатор кнопки закриття та натисніть на кнопку закрити.


4
$ ('# modal'). modal ('тумблер'); краще приховати модальну тінь
hamzeh.hanandeh

5
@ hamzeh.hanandeh, toggleзберігає накладку і не є рішенням. Ви завжди повинні використовувати showабо hide.
ryanpcmcquen

81
$('#modal').modal('toggle'); 

або

$('#modal').modal().hide();

повинні працювати.

Але якщо нічого іншого не працює, ви можете зателефонувати безпосередньо за допомогою кнопки модального закриття:

$("#modal .close").click()

10
той, що перебуває у режимі hid (), закриває модальний, але залишає розмитим фон. $ ("# modal .close"). click () робить це ідеально. Дякую!
Шильпа

4
Це вже чітко зафіксовано, тут не потрібно підробляти клацання, що здається досить привабливим. Правильна відповідь: $ ('# modal'). Modal ('приховати');
Майкл Петерсон

this -> $ ('# modal'). modal (). hid ();
ТАРА

У мене є модель, яка не закривається, $('#modal').modal('hide')проте я можу її закрити за допомогою, $('#modal').modal('toggle')але вона відображає вертикальну смугу прокрутки після закриття. Так що для мене $('#modal').hide()працювали чудово, але я хочу знати, чи це створить якісь проблеми? І я кодую всередині, $('#modal .close').click()так що я не думаю, що я міг би використовувати його для закриття модального.
Ахтішам





8

Мої п’ять центів на цьому - це те, що я не хочу націлювати на модальний завантажувальний модуль за допомогою ідентифікатора і бачити, як має бути лише один модальний за один раз, наступне має бути цілком достатнім для видалення модалу, оскільки перемикання може бути небезпечним :

$('.modal').removeClass('show');

2
Намір хороший, але такий підхід не завжди спрацює. Інші елементи сторінки, в тому числі <body>, додають до них класи, які також потрібно буде повернути. Найкраща відповідь - використовувати 'hide'метод.
JustinStolle

7

У деяких випадках винуватцем може бути помилка введення тексту. Наприклад, переконайтеся, що у вас є:

data-dismiss="modal"

і ні

data-dissmiss="modal"

Зверніть увагу на подвійне "ss" у другому прикладі, що призведе до відмови кнопки Close.


6

Ми можемо закрити модальне спливаюче вікно такими способами:

// We use data-dismiss property of modal-up in html to close the modal-up,such as

<div class='modal-footer'><button type='button' class="btn btn-default" data-dismiss='modal'>Close</button></div>

 // We can close the modal pop-up through java script, such as

 <div class='modal fade pageModal'  id='openModal' tabindex='-1' data-keyboard='false' data-backdrop='static'>

    $('#openModal').modal('hide'); //Using modal pop-up Id.
    $('.pageModal').modal('hide'); //Using class that is defined in modal html.

6

$('.modal.in').modal('hide');

Використовуйте наведений вище код, щоб приховати модальний фон, якщо ви використовуєте кілька модальних поп на одній сторінці.


Або тільки $('.modal').modal('hide');зроблять.
Метт Рой

6

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
$(window).load(function(){
      $('#myModal').modal('show');
});
$(function () {
   $('#modal').modal('toggle');
});
</script>
</head>
<body>

<div class="container">
  <h2>Modal Example</h2>
  <!-- Trigger the modal with a button -->
  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

  <!-- Modal -->
  <div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
    
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Modal Header</h4>
        </div>
        <div class="modal-body">
          <p>Some text in the modal.</p>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>
      
    </div>
  </div>
  
</div>

</body>
</html>


Помилка: "message": "Uncaught TypeError: $ (...). Модальний режим не є функцією"
Іван Бурлуцький

Так. У мене помилка, якщо "Запустити фрагмент коду" в Chrome (Linux Mint). Але це працює у Firefox.
Іван Бурлуцький

1
@Ivan Burlutskiy, Дякую, що поінформували мене: Це проблема з jquery include, тому я вирішив це. тепер він працює чудово у всіх браузерах.
Ганеш Путта

5
   function Delete(){
       var id = $("#dgetid").val();
       debugger
       $.ajax({
           type: "POST",
           url: "Add_NewProduct.aspx/DeleteData",
           data: "{id:'" + id + "'}",
           datatype: "json",
           contentType: "application/json; charset=utf-8",
           success: function (result) {
               if (result.d == 1) {
                   bindData();
                   setTimeout(function(){ $('#DeleteModal').modal('hide');},1000);
               }
           }
       });
   };

Привіт - дякую за вашу відповідь. Я відформатував це як код (який був досить простим - просто вставте перший рядок трохи більше). Однак я гадаю, що $('#DeleteModal').modal('hide');тут актуальні лише ті ?
Rup


3

Використання modal.hide могло б приховати лише модальний. Якщо ви використовуєте накладку під модальним, він все одно буде. використовуйте виклик клацання, щоб фактично закрити модальний і зняти накладку.

$("#modalID .close").click()

3

Інший спосіб зробити це, що спочатку ви видалите клас modal-open, який закриває модал. Потім ви видаляєте класовий модальний фон, який видаляє сірувату кришку модала.

Можна використовувати наступний код:

$('body').removeClass('modal-open')
$('.modal-backdrop').remove()  

Будь ласка, спробуйте уникати просто демпінгового коду як відповіді та спробуйте пояснити, що це робить і чому. Ваш код може бути не очевидним для людей, які не мають відповідного досвіду кодування. Будь ласка, відредагуйте свою відповідь, щоб включити роз'яснення, контекст і спробувати згадати будь-які обмеження, припущення чи спрощення у своїй відповіді.
Фріц

Добре, так що в основному, це робить видалення класу modal-open, який закриває модаль. потім видаляє клас модальний фон, який видаляє сіруватий покрив модального
Orozcorp

3

Я закрив модальний програмно цей трюк

Додайте кнопку в модалі data-dismiss="modal"та прихойте кнопку за допомогою display: none. Ось як це буде виглядати

<div class="modal fade" id="addNewPaymentMethod" role="dialog">
  <div class="modal-dialog">
   .
   .
   .
   <button type="button" id="close-modal" data-dismiss="modal" style="display: none">Close</button>
  </div>
</div>

Тепер, коли ви хочете закрити модальний програматично, просто запустіть події клацання на цій кнопці, що не видно користувачеві

У Javascript ви можете викликати натискання на цю кнопку так:

document.getElementById('close-modal').click();

2

Цей код добре працював для мене, щоб закрити модальний (я використовую завантажувальний пристрій 3.3)

$('#myModal').removeClass('in')

2

У моєму випадку головна сторінка, з якої було запущено режим завантаження, почала не реагувати після використання $("#modal").modal('toggle');способу, але почала відповідати таким чином:

$("#submitBtn").on("click",function(){
  $("#submitBtn").attr("data-dismiss","modal");
});

2

Це добре працює

$(function () {
   $('#modal').modal('toggle');
});

Однак, коли у вас є кілька мод, розташованих один над одним, це не ефективно, тож натомість це працює

data-dismiss="modal"

2

Після деякого тестування я виявив, що для модального завантаження потрібно зачекати деякий час, перш ніж виконати $(.modal).modal('hide')після виконання $(.modal).modal('show'). І я виявив, що в моєму випадку мені потрібно принаймні 500 мілісекундних інтервалів між ними.
Отже, це мій тестовий випадок та рішення:

$('.modal-loading').modal('show');
setTimeout(function() {
  $('.modal-loading').modal('hide');
}, 500);

це вирішує проблеми, які у мене з модалом не закриваються, коли я відкриваю ще один, дякую
hal9000

2

Ви можете бачити цю посилання, але якщо це посилання було видалено, прочитайте цей опис:

Виклик модалу з id myModal одним рядком JavaScript:

$('#myModal').modal(options)

Параметри

Параметри можна передавати через атрибути даних або JavaScript. Для атрибутів даних додайте ім'я параметра до data- , як у data-backdrop = "" .

|-----------|-------------|--------|---------------------------------------------|
| Name      | Type        | Default| Description                                 |
|-----------|-------------|--------|---------------------------------------------|
| backdrop  | boolean or  | true   | Includes a modal-backdrop element.          |
|           | the string  |        | Alternatively, specify static for a         |
|           | 'static'    |        | backdrop which doesn't close the modal      |
|           |             |        | on click.                                   |
|           |             |        |                                             |
| keyboard  | boolean     | true   | Closes the modal when escape key is pressed.|   
|           |             |        |                                             |
| focus     | boolean     | true   | Puts the focus on the modal when initialized|       
|           |             |        |                                             |
| show      | boolean     | true   | Shows the modal when initialized.           |
|-----------|-------------|--------|---------------------------------------------|

Методи

Асинхронні методи та переходи

Усі методи API асинхронні і починають перехід. Вони повертаються до абонента, як тільки починається перехід, але до його закінчення. Крім того, виклик методу для перехідного компонента буде ігноруватися.

Перегляньте нашу документацію JavaScript для отримання додаткової інформації.

.modal (варіанти)

Активує ваш вміст як модальний. Приймає об'єкт необов'язкових опцій.

$('#myModal').modal({
   keyboard: false
})

.modal ('тумблер')

Вручну перемикає модальний. Повертається до абонента перед тим, як модальний режим фактично був показаний або прихований (тобто до того, як відбудеться подія показана.bs.modal або hidden.bs.modal).

$('#myModal').modal('toggle')

.modal ('показ')

Вручну відкривається модаль. Повертається до абонента до того, як модальний фактично буде показаний (тобто до того, як відбудеться подія показаний.bs.modal).

$('#myModal').modal('show')

.modal ('приховати')

Вручну приховує модаль. Повертається до абонента до того, як модал фактично був прихований (тобто до того, як відбудеться подія hidden.bs.modal).

$('#myModal').modal('hide')

.modal ('handleUpdate')

Ручне регулювання положення модалу, якщо висота модаля змінюється, поки він відкритий (тобто у випадку, якщо з’являється смуга прокрутки).

$('#myModal').modal('handleUpdate')

.modal ('розпоряджатися')

Знищує модальний елемент.

Події

Модальний клас Bootstrap розкриває кілька подій для підключення до модальної функціональності. Усі модальні події запускаються на самому модалі (тобто на **). Тип Опис

|----------------|--------------------------------------------------------------|
| Event Type     | Description                                                  |
|----------------|--------------------------------------------------------------|
| show.bs.modal  | This event fires immediately when the **show** instance      |
|                | method is called. If caused by a click, the clicked element  |
|                | is available as the **relatedTarget** property of the event. | 
|                |                                                              |
| shown.bs.modal | This event is fired when the modal has been made visible to  |
|                | the user (will wait for CSS transitions to complete). If     |
|                | caused by a click, the clicked element is available as the   | 
|                | **relatedTarget** property of the event.                     |
|                |                                                              |
| hide.bs.modal  | This event is fired immediately when the **hide** instance   |
|                | method has been called.                                      |
|                |                                                              |
| hidden.bs.modal| This event is fired when the modal has finished being hidden |
|                | from the user (will wait for CSS transitions to complete).   |
|----------------|--------------------------------------------------------------|

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

0

Крім того, ви можете "натиснути" на "x", що закриває діалогове вікно. Наприклад:

$(".ui-dialog-titlebar-close").click();


0

У моєму випадку я використовував кнопку, щоб показати модаль

<button type="button" class="btn btn-success" style="color:white"
    data-toggle="modal" data-target="#my-modal-to-show" >
    <i class="fas fa-plus"></i> Call MODAL
</button>

Отже, у своєму коді, щоб закрити модальний (який має id = 'my-modal-to-show'), я закликаю цю функцію (у Angular typecript):

closeById(modalId: string) {
  $(modalId).modal('toggle');
  $(modalId+ ' .close').click();
}

Якщо я закликаю $ (modalId) .modal ('приховати'), він не працює, і я не знаю, чому

PS .: У моєму модалі я також зашифрував цей елемент кнопки з .close класом

<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
    <span aria-hidden="true">&times;</span>
</button>

0

іноді рішення не працює, тож вам належним чином видалити клас та додати дисплей css: жодне вручну.

$("#modal").removeClass("in");
$("#modal").css("display","none");
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.