Inicie o Bootstrap Modal no carregamento da página


230

Não conheço javascript. A documentação do bootstrap diz para

Chame o modal via javascript: $ ('# myModal'). Modal (opções)

Não faço idéia de como chamar isso em um carregamento de página. Usando o código fornecido na página de inicialização, posso chamar o Modal com êxito em um clique de elemento, mas quero que ele seja carregado imediatamente em um carregamento de página.



3
Esta pergunta foi respondida várias vezes. por favor use a função de pesquisa "executar javascript no carregamento da página".
Rlemon

14
@rlemon - Não necessariamente; a pergunta era estritamente sobre o modal Bootstrap e não executava funções no carregamento da página em geral. O modal de bootstrap também pode ser manipulado por meio de classes CSS, veja uma das respostas.
Miro

este help.simpler vontade: w3schools.com/jsref/... com o evento onload
user2290820

Respostas:


426

Apenas envolva o modal que você deseja chamar no carregamento da página dentro de um loadevento jQuery na seção head do seu documento e ele deverá aparecer da seguinte maneira:

JS

<script type="text/javascript">
    $(window).on('load',function(){
        $('#myModal').modal('show');
    });
</script>

HTML

<div class="modal hide fade" id="myModal">
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>

Você ainda pode chamar o modal em sua página chamando-o com um link da seguinte forma:

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>

16
Esta resposta está correta. Uma coisa a notar é que este não irá funcionar em todos no evento pronto documento: $(document).ready( ... . Ele só vai funcionar no evento de carregamento de janela: $(window).load( ... .
precisa saber é o seguinte

5
Outra observação importante: muitas pessoas postam seus javascript no final do corpo. nesse caso, a função onload deve ser incluída no final, após as inclusões.
Adam Joseph Looze

@ racl101 É o oposto para mim (faz 2 anos desde o seu post, então as coisas podem ter mudado). Ele só funciona $(document).ready( ...quando eu armazeno esse script em um MVC PartialView para o meu Modal que é adicionado dinamicamente quando um usuário clica em algo, talvez seja por isso. Ironicamente, seu aviso do que não fazer me permitiu descobrir como fazê-lo funcionar para mim. Então obrigado? :)
MikeTeeVee

O Hide não funcionou para mim (como classe), pois o bootstrap o anulou e, portanto, não mostrava nada. Parecia terrível (não como um modal) e também não foi fechado quando você pressionou o botão. A parte javascript funcionou, mas eu sugeriria usar a parte html do modal que GAURAV MAHALE usou em sua resposta, mas observe para remover a palavra 'show' na classe de seu modal.
Malachi

Basta incluir a biblioteca jQuery primeiro!
ersks

84

Você não precisa javascriptmostrar modal

A maneira mais simples é substituir "ocultar" por "em"

class="modal fade hide"

tão

class="modal fade in"

e você precisa adicionar o onclick = "$('.modal').hide()"botão fechar;

PS: Eu acho que a melhor maneira é adicionar o script jQuery:

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

1
Eu tentei esse método, mas tenho dois problemas. 1) o modal não será fechado. 2) O fundo modal desapareceu. Alguma ideia?
Nick Green

2
A solução jquery acima funciona muito bem. Uma linha de código faz o truque. @NickGreen Faça uma tentativa: class = "modal fade". Remova 'ocultar' e 'dentro'. Isso funciona no meu caso, mas ainda não está ativo, caso contrário, eu postaria o link.
Randy Greencorn

39

Basta adicionar o seguinte-

class="modal show"

Exemplo de trabalho-

<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<div class="container">
  <!-- 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 show" 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>


10
Esta solução não está funcionando: a caixa de diálogo fica permanentemente presa na parte superior da página. Além disso, se você usar a classe "fade" junto com "modal", a caixa de diálogo não aparecerá.
Boris Burkov 8/08/14

7
Depende do cenário em que o modal precisa ser exibido. No meu caso, quero que o modal fique permanentemente bloqueado.
Professor de programação

O problema de Bob também foi encontrado

1
Por que ter botões próximos se eles não fazem nada? Existe alguma maneira de fazer isso funcionar?
Ellen McCastle

1
@boris, adicione ao botão de fechar modal:onclick = "$('.modal').removeClass('show').addClass('fade');"
Viu-mon e Natalie

21

Você pode tentar este código executável

$(window).load(function()
{
    $('#myModal').modal('show');
});
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

<div class="container">
  <!-- 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>

Mais pode ser encontrado aqui .

Pense que você tem sua resposta completa.


Obrigado por publicar as ligações necessárias para a cabeça :)
DanielaB67

Para mim, esse código foi o único que correu lindamente. Obrigado.
Semmerket 9/03

7

sobre o que Ilich de Andre diz que você precisa adicionar o script js após a linha no que chama de jquery:

<script src="content/bootstrapJS/jquery-2.1.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
     $(window).load(function(){
         $('#myModal').modal('show');
      });
</script>

no meu caso, esse foi o problema, espero que ajude


5

No meu caso, adicionar jQuery para exibir o modal não funcionou:

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

O que parecia ser porque o modal tinha o atributo aria-hidden = "true":

<div class="modal fade" aria-hidden="true" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">

A remoção desse atributo foi necessária, bem como o jQuery acima:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">

Observe que eu tentei alterar as classes modais de modal fadepara modal fade ine isso não funcionou. Além disso, alterar as classes de modal fadepara modal showimpediu que o modal pudesse ser fechado.


5

Heres uma solução [sem inicialização javascript!]

Não consegui encontrar um exemplo sem inicializar seu modal com javascript, $('#myModal').modal('show')portanto, aqui está uma sugestão de como você pode implementá-lo sem atraso no carregamento da página.

  1. Edite sua div de contêiner modal com classe e estilo:

<div class="modal in" id="MyModal" tabindex="-1" role="dialog" style="display: block; padding-right: 17px;">

  1. Edite seu corpo com classe e estilo:

    <body class="modal-open" style="padding-right:17px;">

  2. Adicionar div modal-backdrop

    <div class="modal-backdrop in"></div>

  3. Adicionar script

    $(document).ready(function() {
        $('body').css('padding-right', '0px');
        $('body').removeClass('modal-open');
        $('.modal-backdrop').remove();
    
        $('#MyModal').modal('show'); });

    O que acontecerá é que o html do seu modal será carregado no carregamento da página sem javascript (sem demora). Neste ponto, você não pode fechar o modal, por isso temos o script document.ready, para carregar o modal corretamente quando tudo estiver carregado. Na verdade, removeremos o código personalizado e inicializaremos o modal (novamente) com o .modal ('show').


Boa sugestão. Obrigado!
RafaSashi

5

Você pode ativar o modal sem escrever JavaScript simplesmente por meio de atributos de dados.

A opção "show" configurada como true mostra o modal quando inicializado:

<div class="modal fade" tabindex="-1" role="dialog" data-show="true"></div>

4

Como outros já mencionaram, crie seu modal com display: block

<div class="modal in" tabindex="-1" role="dialog" style="display:block">
...

Coloque o pano de fundo em qualquer lugar da sua página, pois ele não precisa estar necessariamente na parte inferior da página

<div class="modal-backdrop fade show"></div> 

Em seguida, para poder fechar a caixa de diálogo novamente, adicione este

<script>
    $("button[data-dismiss=modal]").click(function () {
        $(".modal.in").removeClass("in").addClass("fade").hide();
        $(".modal-backdrop").remove();
    });
</script>

Espero que isto ajude


4

Testado com Bootstrap 3 e jQuery (2.2 e 2.3)

$(window).on('load',function(){
  $('#myModal').modal('show');
});



<!-- 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"><i class="fa fa-exclamation-circle"></i>&nbsp; //Your modal Title</h4>
        </div>
        <div class="modal-body">
          //Your modal Content
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
        </div>
      </div>

    </div>
</div>

https://jsfiddle.net/d7utnsbm/


1
@EduardoCuomo sim, é trabalho jsfiddle.net/bsmpLvz6 Este exemplo foi feito usando Bootstrap 3.3 e jQuery 2.2
Felipe Lima

3
<div id="ModalStart" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-body">
          <p><i class="icon-spinner icon-spin icon-4x"></i></p>
    </div>
</div>

Você pode mostrá-lo no início, mesmo sem Javascript. Basta excluir a classe "ocultar".

class="Modal"

3

Além das respostas do usuário2545728 e Reft, sem javascript, mas com omodal-backdrop in

3 coisas a acrescentar

  1. uma div com as classes modal-backdrop inantes da classe .modal
  2. style="display:block;" para a classe .modal
  3. fade in junto com a classe .modal

Exemplo

<div class="modal-backdrop in"></div>

<div class="modal fade in" tabindex="-1" role="dialog" aria-labelledby="channelModal" style="display:block;">

    <div class="modal-dialog modal-lg" role="document">

        <div class="modal-content">

            <div class="modal-header">

                <h4 class="modal-title" id="channelModal">Welcome!</h4>

            </div>

            <div class="modal-body" style="height:350px;">

                How did you find us?

            </div>

        </div>

    </div>

</div>

3

Atualização 2020 - Bootstrap 4

A marcação modal mudou ligeiramente para o Bootstrap 4. Veja como você pode abrir o modal no carregamento da página e, opcionalmente, atrasar a exibição do modal ...

$(window).on('load',function(){
    var delayMs = 1500; // delay in milliseconds

    setTimeout(function(){
        $('#myModal').modal('show');
    }, delayMs);
});    

<div class="modal fade" id="myModal">
      <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h4 class="modal-title">My Modal</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                </div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary mx-auto" data-dismiss="modal">Close</button>
                </div>
            </div>
      </div>
</div>

Demonstração sobre Codeply


Como alternativa, você pode usar o atributo "data-show": getbootstrap.com/docs/4.5/components/modal/#via-data-attributes
Mike

2

No bootstrap 3, você só precisa inicializar o modal por meio de js e se no momento da página carregar a marcação modal estiver na página, o modal será exibido.

Caso deseje evitar isso, use a opção em show: falseque você inicializa o modal. Algo assim: $('.modal').modal({ show: false })


0

Você pode querer jquery.jsadiar para um carregamento mais rápido da página. No entanto, se jquery.jsfor adiado, $(window).loadpode não funcionar. Então você pode tentar

setTimeout(function(){$('#myModal').modal('show');},3000);

ele exibirá seu modal depois que a página for completamente carregada (incluindo jquery)


3
Definir um tempo limite para que o DOM esteja pronto é a melhor prática ruim. E se o usuário tiver uma conexão lenta? Do que poderia demorar 10 segundos .. Por isso, nunca NUNCA fazer isso
DutchKevv

0

Para evitar que o bootstrap seja anulado e perca sua funcionalidade, basta criar um botão de inicialização regular, fornecer um ID e 'clicar nele' usando jquery, assim: O botão de inicialização:

<button type="button" id="btnAnouncement" class="btn btn-primary" data-toggle="modal" data-target="#modalAnouncement">
  See what´s new!
</button>

O gatilho jQuery:

$(document).ready(function () {
  $('#btnAnouncement').click();
)}

Espero que ajude. Felicidades!


-1

Exemplo simples Faça um girador de carregador de um modal de bootstrap

<!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.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script>
  $(document).ready(function(){
  $('#myModal').modal('show'); 
  setTimeout(function(){
  $('#myModal').modal('hide'); 
  }, 5000);
   });
  </script>
  <style>
.loader {
  border: 13px solid #f3f3f3;
  border-radius: 50%;
  border-top: 16px solid #3498db;
  width: 100px;
  height: 100px;
  -webkit-animation: spin 2s linear infinite; /* Safari */
  animation: spin 2s linear infinite;
}

/* Safari */
@-webkit-keyframes spin {
  0% { -webkit-transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); }
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
.modal-dialog{
width: 150px;
    margin: 10% auto;
}
.modal-content{
background-color: transparent; 
   border: 0;
    border-radius: 0;
    outline: 0;
    box-shadow: none;
}
</style>
</head>
<body>

<div class="container">

  <!-- Modal -->
  <div class="modal fade" data-backdrop="static" id="myModal" role="dialog">
    <div class="modal-dialog">

      <!-- Modal content-->
      <div class="modal-content">

        <div class="modal-body">
         <div class="loader"></div>
        </div>

      </div>

    </div>
  </div>

</div>

</body>
</html>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.