Como fechar o modal bootstrap do Twitter (após o lançamento inicial)

91

Eu sou muito noob, então acho que estou supervisionando algo (provavelmente óbvio) com o modal bootstrap do Twitter. O que estou tentando fazer é conseguir um modal para lançar apenas no celular. Isso funciona bem com a adição da classe .visible-phone no div modal. Por enquanto, tudo bem. Mas quero que funcione, o que significa que você pode fechá-lo com o botão X. E não consigo fazer o botão funcionar.

<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>

No final do html coloco jquery.js (primeiro) e bootstrap.modal.js e bootstrap.transition.js. Na verdade, todos os módulos de bootstrap js (para não perder um include). Não tenho experiência com js ..

Perdoe-me se fiz uma pergunta realmente estúpida. Não consegui encontrar a resposta para esta situação específica no log.

Monique De Haas
fonte

Respostas:

219

$('#myModal').modal('hide') deveria fazer isso

Ayal Gelles
fonte
sim, está funcionando. Mas eu não tenho a mesma animação que temos usando 'data-despedir = "modal"'?
Chris
ok meu erro. Na verdade não me lembro do problema que tive na época, agora uso e funciona perfeitamente. TY!
Chris,
Saiba mais aqui .. stackoverflow.com/questions/10944302/…
Sanjay Kumar
6
Isso é estranho, $('#myModal').modal('show')funciona para mim, mas ocultar não.
Charlotte
3
@LittleBigBot tente usar no $('#myModal').modal('toggle');lugar
Edson Horacio Junior
27

Tive problemas para fechar a caixa de diálogo modal de bootstrap, se ela foi aberta com:

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

Resolvi este problema ao abrir a caixa de diálogo através do seguinte link:

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

Não se esqueça da inicialização:

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

Também usei os seguintes atributos para o botão de fechamento:

data-dismiss="modal" data-target="#myModal"
Artkoenig
fonte
Oi artjom. Thnx! Vou executá-lo e dar feedback. Você não está usando o botão à para abrir o modal? Pois é isso que estou tentando alcançar. Ter um lançamento modal inicialmente e apenas no celular para oferecer um menu de navegação rápida para o local (não relevante diretamente quando no desktop) essa é a ideia.
Monique De Haas
Sim data-dispensar = "modal" data-target = "# meuModal" resolveu meu problema! appriciate!
Dheeraj Thedijje
13

Adicione a classe ocultar ao modal

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

Código 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>
shaunak1111
fonte
13

.modal ('ocultar') oculta manualmente um modal. Use o seguinte código para fechar seu modelo de bootstrap

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

Dê uma olhada no código de trabalho aqui

Ou

Tente aqui

Subodh Ghulaxe
fonte
6

Tente especificar exatamente o modal que o botão deve fechar com data-target. Portanto, seu botão deve ser semelhante ao seguinte -

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

Além disso, você só precisa de bootstrap.modal.js para poder remover os outros com segurança.

Editar: se isso não funcionar, remova a classe visible-phone e teste-a no navegador do PC, em vez do telefone. Isso mostrará se você está recebendo erros de javascript ou se é um problema de compatibilidade, por exemplo.

Editar: código de demonstração

<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
fonte
Olá, @Simon Cunningham Tnx, um milhão pela resposta! Eu coloquei o alvo de dados. Não funcionou (infelizmente) Então eu removi a classe de telefone visível. Não fez diferença. code <div class = "modal visible-phone" id = "myModal"> <div class = "modal-header"> <button class = "close" data-despedir = "modal" data-target = "# myModal"> × </button> <h3> texto introdutório <br> deseja navegar para ... </h3> </div> <div class = "modal-body"> <ul class = "nav"> <li> .. . lista de links aqui </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>
Monique De Haas
Desculpe pela bagunça de texto lá;) Segui seu conselho. Parece lógico dar ao botão Fechar um destino de dados exato. Mas de alguma forma ainda não estou fazendo funcionar. Mesmo se desativando o telefone visível. Não parece influenciar o botão Fechar. (o que é uma coisa boa)
Monique De Haas
Como você está abrindo seu modal inicialmente? Tente abri-lo como abaixo - <a data-toggle="modal" href="#myModal" class="btn"> Abrir modal </a>
Simon Cunningham
Eu adicionei algum código de demonstração reduzido à minha resposta original. Os arquivos javascript e css são locais para o meu projeto de teste, basta substituí-los por links para o seu próprio.
Simon Cunningham
6

De acordo com a documentação, ocultar / alternar deve funcionar. Mas isso não acontece.

Aqui está como eu fiz

$('#modal-id').modal('toggle'); //Hide the modal dialog
$('.modal-backdrop').remove(); //Hide the backdrop
$("body").removeClass( "modal-open" ); //Put scroll back on the Body
user706001
fonte
1
Esta é realmente a resposta correta de "força bruta" .. mas sugiro reescrevê-la para obter a animação correta:$("#modal-id").modal("toggle"); $(".modal-backdrop").fadeOut('fast',function(){ $("body").removeClass( "modal-open" ); $(".modal-backdrop").remove(); });
DerDu
3

Experimente isso ..

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

$('.modal-backdrop').remove();
Theek
fonte
1

Tive o mesmo problema no iphone ou desktop, não consegui fechar a caixa de diálogo ao pressionar o botão Fechar.

Eu descobri que a <button>tag define um botão clicável e é necessária para especificar o atributo type para um elemento da seguinte maneira:

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

verifique o código de exemplo para modais de bootstrap em: Página BootStrap javascript

Isma
fonte
0

Se você tiver poucos modais mostrados simultaneamente, pode especificar o modal de destino para o botão in-modal com atributos data-togglee 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>

Em algum lugar fora do código modal, você pode ter outro botão de alternância:

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

O usuário não pode clicar no botão de alternância modal enquanto este botão estiver oculto e correto funcionar com a opção "modal"de atributo data-toggle. Este esquema funciona de forma automática!

Sound Blaster
fonte
0

Aqui está um snippet para não apenas fechar modais sem atualizar a página, mas ao pressionar Enter, ele envia modal e fecha sem atualizar

Eu tenho configurado em meu site onde posso ter vários modais e alguns modais processam dados no envio e outros não. O que faço é criar um ID exclusivo para cada modal que realiza o processamento. Por exemplo, em minha página da web:

HTML (rodapé modal):

 <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;
      }
    });
});

Como você pode ver, o envio executa o processamento, por isso tenho esse jQuery para esse modal. Agora, digamos que eu tenha outro modal nesta página da web, mas nenhum processamento é executado e, como um modal é aberto por vez, coloco outro $(document).ready()em um script php / js global que todas as páginas obtêm e dou ao botão Fechar do modal uma classe chamada ".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 (inclua 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');
                    }
                }
         });
    });
yardpenalty.com
fonte