Як змусити twitter bootstrap модально закрити (після початкового запуску)


91

Я дуже нуб, тому я думаю, що я наглядаю за чимось (можливо, очевидним) за допомогою модального твіттера. Я намагаюся отримати модальний запуск лише на мобільному. Це чудово працює з додаванням класу .visible-phone на модальний div. Все йде нормально. Але тоді я хочу, щоб це працювало, тобто ви можете закрити його кнопкою X. І я не можу змусити кнопку спрацювати.

<div class="modal visible-phone" id="myModal">
  <div class="modal-header">
    <button class="close" data-dismiss="modal">×</button>
    <h3>text introductory<br>want to navigate to...</h3>
 </div>
 <div class="modal-body">
    <ul class="nav">
      <li> ... list of links here </li>
    </ul>
   </div>
  </div>

Внизу html я помістив jquery.js (перший) та bootstrap.modal.js та bootstrap.transition.js. Власне всі модулі js bootstrap (не пропустити включення). Я не маю досвіду роботи з js ..

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

Відповіді:


219

$('#myModal').modal('hide') повинен це зробити


так, це працює. Але у мене немає тієї самої анімації, яка є у нас за допомогою 'data-dismiss = "modal"'?
— Кріс

добре, моя помилка. Насправді я не пам’ятаю проблеми, яка була у мене на той час, зараз я цим користуюся, і вона працює чудово. ТАЙ!
— Кріс,

Дізнайтеся більше тут .. stackoverflow.com/questions/10944302/…
— Санджай Кумар

6
Це дивно, $('#myModal').modal('show')працює для мене, але приховувати ні.
— Шарлотта

3
@LittleBigBot спробуйте використовувати $('#myModal').modal('toggle');замість цього
— Edson Horacio Junior

27

У мене були проблеми із закриттям модального діалогового вікна завантаження, якщо воно було відкрито за допомогою:

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

Я вирішив цю проблему, відкривши діалогове вікно за таким посиланням:

<a href="#myModal" data-toggle="modal">Open my dialog</a>

Не забудьте про ініціалізацію:

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

Я також використовував такі атрибути для кнопки закриття:

data-dismiss="modal" data-target="#myModal"

Привіт артжоме. Thnx! Запустить його і дасть відгук. Ви не використовуєте кнопку à, щоб відкрити модаль? Оскільки цього я намагаюся досягти. Спочатку запустите модальний запуск і лише на мобільному, щоб запропонувати швидке навігаційне меню до місця розташування (не має значення безпосередньо на робочому столі), ось у чому ідея.
— Монік Де Хаас,

Так data-dismiss = "modal" data-target = "# myModal" вирішив мою проблему! оцініть!
— Dheeraj Thedijje

13

Додайте приховування класу до модального

<!-- Modal Demo -->
<div class="modal hide" id ="myModal" aria-hidden="true" >

Код Javascript

 <!-- Use this to hide the modal necessary for loading and closing the modal-->
 <script>
     $(function(){
         $('#closeModal').click(function(){
              $('#myModal').modal('hide');
          });
      });
 </script>

 <!-- Use this to load the modal necessary for loading and closing the modal-->
 <script>
     $(function () {
         $('#myModal').modal('show');
     });
  </script>

13

.modal ('сховати') вручну приховує модаль. Використовуйте наступний код, щоб закрити модель завантаження

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

Погляньте на робочий код тут

Або

Спробуйте тут


6

Спробуйте точно вказати модальний спосіб, який кнопка повинна закривати за допомогою data-target. Тож ваша кнопка повинна виглядати наступним чином -

<button class="close" data-dismiss="modal" data-target="#myModal">×</button>

Крім того, вам знадобиться лише bootstrap.modal.js, щоб ви могли безпечно видалити інші.

Редагувати: якщо це не працює, видаліть клас видимого телефону та протестуйте його у браузері ПК, а не на телефоні. Це покаже, чи виникають у вас помилки javascript, чи проблема з сумісністю, наприклад.

Редагувати: Демо-код

<html>
<head>
    <title>Test</title>
    <link href="/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/bootstrap.modal.js" type="text/javascript"></script>

    <script type="text/javascript">
      $(document).ready(function () {
        if( navigator.userAgent.match(/Android/i)
            || navigator.userAgent.match(/webOS/i)
            || navigator.userAgent.match(/iPhone/i)
            || navigator.userAgent.match(/iPad/i)
            || navigator.userAgent.match(/iPod/i)
            || navigator.userAgent.match(/BlackBerry/i)
          ) {
          $("#myModal").modal("show");
        }

        $("#myModalClose").click(function () {
          $("#myModal").modal("hide");
        });
      });
    </script>
</head>
<body>
    <div class="modal hide" id="myModal">
      <div class="modal-header">
        <a class="close" id="myModalClose">×</a>
        <h3>text introductory<br>want to navigate to...</h3>
     </div>
     <div class="modal-body">
        <ul class="nav">
          <li> ... list of links here </li>
        </ul>
   </div>
  </div>
</body>
</html>

Привіт @Simon Cunningham Tnx мільйон за відповідь! Я помістив ціль даних. Не спрацювало (на жаль). Тоді я видалив клас видимого телефону. Не змінив. code <div class = "modal visible-phone" id = "myModal"> <div class = "modal-header"> <button class = "close" data-dismiss = "modal" data-target = "# myModal"> × </button> <h3> вступний текст <br> хочу перейти до ... </h3> </div> <div class = "modal-body"> <ul class = "nav"> <li> .. список посилань тут </li> <li> link2 </li> <li> link3 </li> </ul> </div> </div>code

<div class="modal visible-phone" id="myModal"> <div class="modal-header"> <button class="close" data-dismiss="modal" data-target="#myModal">×</button> <h3>text introductory<br>want to navigate to...</h3> </div> <div class="modal-body"> <ul class="nav"> <li> ... list of links here </li> <li> link2 </li> <li> link3 </li> </ul> </div> </div>
— Монік Де Хаас,

Вибачте за текстовий безлад там;) Я наслідував вашу пораду. Здається логічним дати кнопці закриття точну ціль даних. Але якось я все ще не змушую це працювати. Навіть якщо вимкнути видимий телефон. Схоже, не впливає на кнопку закриття. (це якось добре)
— Монік Де Хаас,

Як ви спочатку відкриваєте свій модальний? Спробуйте відкрити, як показано нижче - <a data-toggle="modal" href="#myModal" class="btn"> Відкрити модальний </a>
— Саймон Каннінгем,

Я додав декілька скорочених демо-кодів до моєї оригінальної відповіді. Файли javascript і css є локальними для мого тестового проекту, просто замініть їх посиланнями на власні.
— Саймон Каннінгем,

6

Відповідно до документації, приховування / перемикання має працювати. Але це не так.

Ось як я це зробив

$('#modal-id').modal('toggle'); //Hide the modal dialog
$('.modal-backdrop').remove(); //Hide the backdrop
$("body").removeClass( "modal-open" ); //Put scroll back on the Body

1
Це насправді правильна відповідь "грубої сили" .. але я пропоную переписати її, щоб анімація була правильною:$("#modal-id").modal("toggle"); $(".modal-backdrop").fadeOut('fast',function(){ $("body").removeClass( "modal-open" ); $(".modal-backdrop").remove(); });
— DerDu

3

Спробуйте на цьому ..

$('body').removeClass('modal-open');

$('.modal-backdrop').remove();

1

У мене була така сама проблема в iphone або робочому столі, не вдалося закрити діалогове вікно при натисканні кнопки закрити.

я з’ясував, що <button>тег визначає кнопку, на яку можна натиснути, і він потрібний для вказівки атрибуту типу для елемента наступним чином:

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

перевірте приклад коду для завантажувальних модалів за адресою: BootStrap javascript Page


0

Якщо у вас кілька модальних зображень, що відображаються одночасно, ви можете вказати цільовий модальний для вбудованої кнопки з атрибутами data-toggleта data-target:

<div class="modal fade in" id="sendMessageModal" tabindex="-1" role="dialog" aria-hidden="true">
      <div class="modal-dialog modal-sm">
           <div class="modal-content">
                <div class="modal-header text-center">
                     <h4 class="modal-title">Modal Title</h4>
                     <small>Modal Subtitle</small>
                </div>
                <div class="modal-body">
                     <p>Modal content text</p>
                </div>
                <div class="modal-footer">
                     <button type="button" class="btn btn-default pull-left" data-toggle="modal" data-target="#sendMessageModal">Close</button>
                     <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#sendMessageModal">Send</button>
                </div>
           </div>
      </div>
 </div>

Десь за межами модального коду ви можете мати ще одну кнопку перемикання:

<a href="index.html#" class="btn btn-default btn-xs" data-toggle="modal" data-target="#sendMessageModal">Resend Message</a>

Користувач не може натиснути кнопку модального перемикання, поки ця кнопка прихована, і вона правильно працює з опцією "modal"для атрибута data-toggle. Ця схема працює автоматично!


0

Ось фрагмент не тільки для закриття модалів без оновлення сторінки, але при натисканні клавіші enter він подає модаль і закривається без оновлення

У мене це встановлено на моєму сайті, де я можу мати кілька модалів, а деякі модали обробляють дані при подачі, а деякі ні. Що я роблю, це створюю унікальний ідентифікатор для кожного модалу, який виконує обробку. Наприклад, на моїй веб-сторінці:

HTML (модальний нижній колонтитул):

 <div class="modal-footer form-footer"><br>
              <span class="caption">
                <button id="PreLoadOrders" class="btn btn-md green btn-right" type="button" disabled>Add to Cart&nbsp; <i class="fa fa-shopping-cart"></i></button>     
                <button id="ClrHist" class="btn btn-md red btn-right" data-dismiss="modal" data-original-title="" title="Return to Scan Order Entry" type="cancel">Cancel&nbsp; <i class="fa fa-close"></i></a>
              </span>
      </div>

jQUERY:

$(document).ready(function(){
// Allow enter key to trigger preloadorders form
    $(document).keypress(function(e) {       
      if(e.which == 13) {   
          e.preventDefault();   
                if($(".trigger").is(".ok")) 
                   $("#PreLoadOrders").trigger("click");
                else
                    return;
      }
    });
});

Як бачите, ця подача виконує обробку, ось чому у мене є цей jQuery для цього модалу. Тепер, припустимо, у мене є інший модаль на цій веб-сторінці, але обробка не виконується, і оскільки один модаль відкритий за раз, я поміщаю інший $(document).ready()у глобальний скрипт php / js, який отримують усі сторінки, і я даю кнопці закриття модалу клас, який називається ".modal-close"::

HTML:

<div class="modal-footer caption">
                <button type="submit" class="modal-close btn default" data-dismiss="modal" aria-hidden="true">Close</button>
            </div>

jQuery (включає global.inc):

  $(document).ready(function(){
         // Allow enter key to trigger a particular button anywhere on page
        $(document).keypress(function(e) {
                if(e.which == 13) {
                   if($(".modal").is(":visible")){   
                        $(".modal:visible").find(".modal-close").trigger('click');
                    }
                }
         });
    });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.