Как открыть модальное окно Bootstrap с помощью jQuery?

466

Я использую функцию модного окна Twitter Bootstrap. Когда кто-то нажимает кнопку отправки на мою форму, я хочу показать модальное окно, нажав кнопку "отправить" в форме.

<form id="myform" class="form-wizard">
    <h2 class="form-wizard-heading">BootStap Wizzard Form</h2>
    <input type="text" value=""/>
    <input type="submit"/>
</form>

<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Modal header</h3>
    </div>
    <div class="modal-body">
        <p>One fine body…</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save changes</button>
    </div>
</div>

JQuery

$('#myform').on('submit', function(ev) {
    $('#my-modal').modal({
        show: 'false'
    }); 


    var data = $(this).serializeObject();
    json_data = JSON.stringify(data);
    $("#results").text(json_data); 
    $(".modal-body").text(json_data); 

    // $("#results").text(data);

    ev.preventDefault();
});
  • 0
    У вас есть опечатка в вашем варианте шоу. Требуется логическое значение, поэтому не заключайте в кавычки 'false' - $ ('# my-modal'). Modal ({show: false});

10 ответов

856
Лучший ответ

У Bootstrap есть несколько функций, которые можно вызвать вручную для модалов:

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

Вы можете увидеть больше здесь: Загрузочный модальный компонент

В частности, раздел .

Итак, вам нужно будет изменить:

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

в

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

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

https://www.youtube.com/watch?v=zK4nXa84Km4

  • 5
    Я не уверен, почему это не работает в моем случае. У меня на странице такой же демонстрационный код, и я закодировал кнопку отправки, как указано выше. Однако, когда я нажимаю на кнопку отправки, модальное окно быстро мигает и исчезает. Я должен нажать кнопку «Назад» браузера, чтобы вернуться на страницу.
  • 5
    Я нашел ответ здесь на мой комментарий выше. Двойная ссылка на bootrap.js на страницах сайта.
Показать ещё 6 комментариев
62

Кроме того, вы можете использовать атрибут data​​p >

<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>

В этом конкретном случае вам не нужно использовать javascript.

Вы можете увидеть больше здесь: http://getbootstrap.com/2.3.2/javascript.html#modals

35

Чаще всего, когда $('#myModal').modal('show'); не работает, это вызвано включением jQuery дважды. Включение jQuery 2 раза заставляет модалы работать.

Удалите одну из ссылок, чтобы заставить ее работать снова.

Кроме того, некоторые плагины также вызывают ошибки, в этом случае добавьте

jQuery.noConflict(); 
$('#myModal').modal('show'); 
  • 3
    DataTables с его предварительно упакованной версией jQuery вызвали это для меня
  • 1
    Большое спасибо. У меня та же проблема: модал это не функция. Но после добавления jQuery.noConflict () это работает.
Показать ещё 1 комментарий
10

Просто вызовите модальный метод (без передачи каких-либо параметров) с помощью селектора jQuery.

Вот пример:

$('#modal').modal();
  • 1
    Как мне передать больше параметров моему модалу? Например, конкретный (динамический) идентификатор?
  • 1
    Как сделать свой идентификатор динамичным? Вы делаете это по ID? если да, вы можете использовать функциональность $ (this) из jQuery для выбора текущего объекта и передачи ему параметров.
8

Если вы используете ссылки onclick для вызова модала jQuery, "href" не может быть нулевым.

Например:

... ...
<a href="" onclick="openModal()">Open a Modal by jQuery</a>
... ...
... ...
<script type="text/javascript">

function openModal(){

    $('#myModal').modal();
}       
</script>

Модаль не может отображаться. Правильный код:

<a href="#" onclick="openModal()">Open a Modal by jQuery</a>
5

Посмотрите здесь полное решение:

http://www.w3schools.com/bootstrap/tryit.asp?filename=trybs_ref_js_modal_show&stacked=h

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

1- Первый bootstrap.min.css 2- jquery.min.js 3- bootstrap.min.js

(Другими словами, jquery.min.js должен быть вызван до bootstrap.min.js)

    <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/3.1.1/jquery.min.js">
</script> 

 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
3

Вот как загрузить бутстрап-предупреждение, как только документ будет готов. Очень просто добавить

 $(document).ready(function(){
   $("#myModal").modal();
});

Я сделал demo в W3Schools.

<!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/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Here is how to load a bootstrap modal as soon as the document is ready </h2>
  <!-- Trigger the modal with a 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>

<script>
$(document).ready(function(){
   $("#myModal").modal();
});
</script>

</body>
</html>
2

Я пробовал несколько методов, которые не удались, но ниже работало для меня как шарм:

$('#myModal').appendTo("body").modal('show');
  • 1
    Так же! Это единственное решение, которое сработало и для меня.
  • 0
    Вы уверены, что он не хочет .appendTo("modal-body") ?
Показать ещё 1 комментарий
0

Try

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

Чтобы открыть или закрыть modal с id myModal.

Если вышеуказанное не работает, значит, bootstrap.js был переопределен каким-либо другим файлом js. Вот решение

1: - Переместить bootstrap.js в нижнюю часть, чтобы он переопределял другие js файлы.

2: - Убедитесь, что порядок ниже

<script src="plugins/jQuery/jquery-2.2.3.min.js"></script>
<!-- Other js files -->
<script src="plugins/jQuery/bootstrap.min.js"></script>
0
<form id="myform" class="form-wizard">
    <h2 class="form-wizard-heading">BootStap Wizzard Form</h2>
    <input type="text" value=""/>
    <input type="submit" id="submitButton"/>
</form>

<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Modal header</h3>
    </div>
    <div class="modal-body">
        <p>One fine body…</p>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Save changes</button>
    </div>
</div>

Вы можете запустить modal с кодом ниже этого.

$(document).ready(function(){
    $("#submitButton").click(function(){
        $("#myModal").modal();
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню