Как закрыть модальное окно twitter bootstrap (после первоначального запуска)


91

Я в большой степени новичок, поэтому я думаю, что наблюдаю за чем-то (вероятно, очевидным) с помощью модального режима загрузки twitter. Я пытаюсь запустить модальное окно только на мобильных устройствах. Это отлично работает с добавлением класса .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. Фактически все модули bootstrap js (чтобы не пропустить включение). Я не разбираюсь в js ..

Пожалуйста, простите меня, если я задал действительно глупый вопрос. Я не смог найти ответ на эту конкретную ситуацию в журнале.

Ответы:


219

$('#myModal').modal('hide') должен сделать это


да, это работает. Но у меня нет такой же анимации, как у нас с 'data-dismiss = "modal"'?
Крис

хорошо, моя ошибка. На самом деле я не помню проблему, которая у меня была в то время, сейчас я использую это, и он отлично работает. ТЫ!
Крис

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

6
Это странно, $('#myModal').modal('show')у меня работает, а у hide - нет.
Charlotte

3
@LittleBigBot попробуйте использовать $('#myModal').modal('toggle');вместо этого
Эдсон Горацио Джуниор

27

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

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

Я решил эту проблему, открыв диалог по следующей ссылке:

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

Не забываем инициализацию:

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

Я также использовал следующие атрибуты для кнопки закрытия:

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

Привет, artjom. Спасибо! Буду запускать и давать отзывы. Вы не используете кнопку à для открытия модального окна? Как это то, чего я пытаюсь достичь. Изначально иметь модальный запуск и только на мобильных устройствах, чтобы предлагать меню быстрой навигации к местоположению (не актуально непосредственно на настольных компьютерах), вот в чем идея.
Моник Де Хаас

Да, data-dismiss = "modal" data-target = "# myModal" решил мою проблему! оцените!
Dheeraj Thedijje

13

Добавьте класс hide в модальный

<!-- 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 ('hide') вручную скрывает модальное окно . Используйте следующий код, чтобы закрыть модель начальной загрузки

$('#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. Миллион за ответ! Я поставил цель данных. Не получилось (к сожалению) Потом удалил класс visible-phone. Не имело значения. 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 02

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

Вот фрагмент не только для закрытия модальных окон без обновления страницы, но и при нажатии клавиши ввода он отправляет модальные окна и закрывается без обновления.

У меня он настроен на моем сайте, где я могу иметь несколько модальных окон, и некоторые модальные окна обрабатывают данные при отправке, а некоторые нет. Что я делаю, так это создаю уникальный идентификатор для каждого модального окна, которое выполняет обработку. Например, на моей веб-странице:

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.