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.

Brandon
fonte
possível duplicata de Javascript Run Função Depois de carga página
rlemon
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>
Andres Ilich
fonte
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');
user2545728
fonte
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>

GAURAV MAHALE
fonte
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.

Abrar Jahin
fonte
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

JPCS
fonte
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.

Altamente Irregular
fonte
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').

Reft
fonte
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>
obiTheOne
fonte
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

jBelanger
fonte
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/

Felipe Lima
fonte
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"
SPIELER
fonte
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>
RafaSashi
fonte
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

Zim
fonte
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 })

Stafie Anatolie
fonte
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)

Viktor Ka
fonte
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!

E. Barney
fonte
-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>
ankush
fonte