Eu li as postagens aqui, o site Bootstrap, e pesquisei no Google como um louco - mas não consigo encontrar o que tenho certeza de que é uma resposta fácil ...
Eu tenho um modal de Bootstrap que abro de um link_to auxiliar como este:
<%= link_to "New Contact", new_contact_path, {remote: true, 'data-toggle' => 'modal', 'data-target' => "#myModal", class: "btn btn-primary"} %>
Na minha ContactsController.create
ação, eu tenho um código que cria Contact
e passa para create.js.erb
. Em create.js.erb
, tenho algum código de manipulação de erros (uma mistura de ruby e javascript). Se tudo correr bem, quero fechar o modal.
É aqui que estou tendo problemas. Não consigo ignorar o modal quando tudo vai bem.
Eu tentei $('#myModal').modal('hide');
e isso não tem efeito. Eu também tentei o $('#myModal').hide();
que faz com que o modal seja descartado, mas deixa o pano de fundo.
Alguma orientação sobre como fechar o modal e / ou descartar o pano de fundo por dentro create.js.erb
?
Editar
Aqui está a marcação para o myModal:
<div class="modal hide" id="myModal" >
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Add Contact</h3>
<div id="errors_notification">
</div>
</div>
<div class="modal-body">
<%= form_for :contact, url: contacts_path, remote: true do |f| %>
<%= f.text_field :first_name, placeholder: "first name" %>
<%= f.text_field :last_name, placeholder: "last name" %>
<br>
<%= f.submit "Save", name: 'save', class: "btn btn-primary" %>
<a class="close btn" data-dismiss="modal">Cancel</a>
<% end %>
</div>
<div class="modal-footer">
</div>
</div>
fonte
$('#myModal').modal('hide');
é a sintaxe correta para fechar / ocultar o modal com o idmyModal
(você pode testá-lo na página de documentação do Bootstrap ). Tem certeza de que possui um elemento com esse ID na sua página? Além disso, o que você está tentando realizar com esta ligação? Sua implementação atual executa uma solicitação do Ajaxnew_contact_path
e ao mesmo tempo abre o modal com o conteúdo de#myModal
- é isso que você deseja?myModal
. Tentei de novo$('myModal').modal('hide')
e ainda não é bom. HM. Em termos do que estou tentando realizar, acho que pode ter sido incorreto usar o link_to helper. Eu substituí isso por:<a data-toggle="modal" href="#myModal" class="btn btn-primary">Add Contact</a>
como eu realmente não preciso de uma ligaçãonew_contact_path
. Eu só quero que o modal seja aberto e depois lide com a entrada do usuário. Obrigado por tomar o tempo para responder. Vou ver se não consigo resolver isso.$('#myModal').modal('hide');
(há uma#
falta no seu comentário).$('#myModal').modal('hide')
. JRespostas:
Com o modal aberto na janela do navegador, use o console do navegador para tentar
Se funcionar (e o modal fechar), você saberá que o seu Javascript próximo não está sendo enviado do servidor para o navegador corretamente.
Se não funcionar, você precisará investigar mais sobre o cliente o que está acontecendo. Por exemplo, verifique se não há dois elementos com o mesmo ID. Por exemplo, funciona na primeira vez após o carregamento da página, mas não na segunda vez?
Console do navegador: firebug para firefox, o console de depuração para Chrome ou Safari, etc.
fonte
fechar modal de autoinicialização você pode passar 'hide' como opção para o método modal da seguinte maneira
Por favor, dê uma olhada no trabalho de violino aqui
O bootstrap também fornece eventos que você pode conectar à funcionalidade modal , como se você deseja acionar um evento quando o modal terminar de ser oculto ao usuário, você pode usar hidden.bs.modal evento , para ler mais sobre métodos e eventos modais aqui em Documentação
Se um dos métodos acima não funcionar, forneça um ID ao botão Fechar e clique no botão Fechar.
fonte
Eu uso o Bootstrap 3.4 Para mim, isso não funciona
$('#myModal').modal('hide')
Desesperado, fiz o seguinte:
Talvez não seja elegante, mas funciona
fonte
A melhor forma de ocultar e mostrar um modal com bootstrap é
fonte
Eu estava enfrentando o mesmo erro e essa linha de código realmente me ajuda.
fonte
fonte
Encontrei a solução correta, você pode usar esse código
fonte
Eu me deparei com o que acredito ser um problema semelhante. O
$('#myModal').modal('hide');
é provável que atravessa essa função e atinge a linhaO problema é que o valor isShown pode ser indefinido, mesmo que o modal seja exibido e o valor seja verdadeiro. Eu modifiquei o código de inicialização ligeiramente para o seguinte
Isso pareceu resolver o problema em sua maior parte. Se o pano de fundo ainda permanecer, você sempre poderá adicionar uma chamada para removê-la manualmente após a chamada oculta
$('.modal-backdrop').remove();
. Não é o ideal, mas funciona.fonte
(Referindo-se ao Bootstrap 3), Para ocultar o uso modal:
$('#modal').modal('hide')
. Mas a razão pela qual o pano de fundo ficou por aqui (para mim) foi porque eu estava destruindo o DOM para o modal antes que o 'hide' terminasse.Para resolver isso, acorrentei o evento oculto com a remoção do DOM. No meu caso:
this.render()
fonte
this.render()
a exibição deleundefined is not a function
no meu console do Chrome.Tive mais sorte de fazer a ligação depois que ocorreu o retorno de chamada "mostrado":
Isso garantiu que o modal fosse carregado antes da chamada hide ().
fonte
O que descobrimos foi que havia apenas um pequeno atraso entre a chamada para o código do servidor e o retorno à chamada de sucesso. Se encerrássemos a chamada para o servidor no
$("#myModal").on('hidden.bs.modal', function (e)
manipulador e depois chamássemos o$("#myModal").modal("hide");
método, o navegador ocultaria o modal e chamaria o código do lado do servidor.Novamente, não elegante, mas funcional.
Como você pode ver, quando
myFunc
invocado, oculta o modal e, em seguida, invoca o código do servidor.fonte
Eu estava enfrentando o mesmo problema e, depois de um pouco de experimentação, encontrei uma solução. No meu manipulador de cliques, eu precisava interromper o evento, assim:
fonte
Aqui está o documento: http://getbootstrap.com/javascript/#modals-methods
Aqui está o método: $ ('# myModal'). Modal ('hide')
Se você precisar abrir várias vezes o modal com conteúdo diferente, sugiro adicionar (nos principais js):
Então você limpará o conteúdo para a próxima abertura e evitará um tipo de cache
fonte
fonte
Até eu tenho o mesmo tipo de problemas. Isso me ajudou muito
fonte
Eu usei este código simples:
fonte
$('#modal').modal('hide');
e suas variantes não funcionaram para mim, a menos que eu tivessedata-dismiss="modal"
como atributo no botão Cancelar. Como você, minhas necessidades eram possivelmente fechar / possivelmente não fechar com base em alguma lógica adicional; portanto, clicar em um linkdata-dismiss="modal"
definitivo não seria suficiente. Acabei tendo um botão oculto com odata-dismiss="modal"
qual poderia chamar programaticamente o manipulador de cliques dee depois dentro dos manipuladores de clique para cancelar quando precisar fechar o modal, você pode ter
fonte
Precisamos cuidar do evento borbulhante. Precisa adicionar uma linha de código
fonte
Sei que essa é uma pergunta antiga, mas descobri que nenhuma delas era exatamente o que eu estava procurando exatamente. Parece ser causado pela tentativa de fechar o modal antes de terminar a exibição.
Minha solução foi baseada na resposta de @ schoonie23, mas tive que mudar algumas coisas.
Primeiro, declarei uma variável global na parte superior do meu script:
Então, no meu código modal:
Então isto: (Observe o nome 'mostrado.bs.modal' indicando que o modal foi mostrado completamente em oposição a 'show' que dispara quando o evento show é chamado. (Eu originalmente tentei apenas 'mostrado', mas não funcionou. )
Espero que isso economize para alguém a pesquisa extra algum dia. Passei um pouco procurando uma solução antes de me deparar com isso.
fonte
Eu usei esse código -
Oculte modal com efeito suave usando Fade Out.
fonte
Se você estiver usando a classe close em seus modais, o seguinte funcionará. Dependendo do seu caso de uso, geralmente recomendo filtrar apenas o modal visível se houver mais de um modal com a classe close.
fonte
document.getElementById ('closeButton'). click (); // adicione um atributo data-demitir = "modal" a um elemento no modal e forneça esse ID
fonte
Essa é a prática recomendada, mas você pode usar essa técnica para fechar o modal chamando o botão Fechar em javascript. Isso fechará o modal após 3 segundos.
fonte
isso pode ser feito apenas em HTML:
fonte