A dispensa de dados remove completamente o elemento. Em vez disso, use o método .hide () do jQuery.
O método de correção rápida:
Usando javascript embutido para ocultar o elemento ao clicar desta forma:
<div class="alert" style="display: none">
<a class="close" onclick="$('.alert').hide()">×</a>
<strong>Warning!</strong> Best check yo self, you're not looking too good.
</div>
<a href="#" onclick="$('alert').show()">show</a>
http://jsfiddle.net/cQNFL/
No entanto, isso só deve ser usado se você for preguiçoso (o que não é bom se você quiser um aplicativo de fácil manutenção).
O método do-it-right:
Crie um novo atributo de dados para ocultar um elemento.
Javascript:
$(function(){
$("[data-hide]").on("click", function(){
$("." + $(this).attr("data-hide")).hide()
// -or-, see below
// $(this).closest("." + $(this).attr("data-hide")).hide()
})
})
e, em seguida, altere dispensar dados para ocultar dados na marcação. Exemplo em jsfiddle .
$("." + $(this).attr("data-hide")).hide()
Isso ocultará todos os elementos com a classe especificada em data-hide, ou seja: data-hide="alert"
ocultará todos os elementos com a classe de alerta.
Xeon06 forneceu uma solução alternativa:
$(this).closest("." + $(this).attr("data-hide")).hide()
Isso ocultará apenas o elemento pai mais próximo. Isso é muito útil se você não quiser dar a cada alerta uma classe exclusiva. Observe que, no entanto, você precisa colocar o botão Fechar no alerta.
Definição de .closest do jquery doc :
Para cada elemento do conjunto, obtenha o primeiro elemento que corresponda ao seletor testando o próprio elemento e percorrendo seus ancestrais na árvore DOM.
alert
) na página. Uma solução para isso seria substituir o conteúdo do retorno de chamada por esta linha$(this).closest("." + $(this).attr("data-hide")).hide();
, o que afetará apenas o elemento pai mais próximo, visto que o botão de dispensar normalmente é colocado dentro do alerta que afeta.Acabei de usar uma variável de modelo para mostrar / ocultar a caixa de diálogo e removi o
data-dismiss="alert"
Exemplo:
funciona para mim e evita a necessidade de sair para jquery
fonte
Acho que uma boa abordagem para esse problema seria aproveitar as vantagens do
close.bs.alert
tipo de evento do Bootstrap para ocultar o alerta em vez de removê-lo. O motivo pelo qual o Bootstrap expõe esse tipo de evento é para que você possa sobrescrever o comportamento padrão de remoção do alerta do DOM.fonte
Se você estiver usando uma biblioteca MVVM, como knockout.js (que eu recomendo), você pode fazer isso de forma mais limpa:
http://jsfiddle.net/bce9gsav/5/
fonte
data-bind="click:function(){showAlert(false);}
é um exemplo perfeito de javascript intrusivo que está longe de ser mais limpo . Eu recomendo fortemente NÃO seguir esta abordagemdata-bind
atributo um tanto controverso stackoverflow.com/questions/13451414/unobtrusive-knockoutPortanto, se você deseja uma solução que possa lidar com páginas html dinâmicas, como você já a incluiu, você deve usar o jQuery's live para definir o manipulador em todos os elementos que estão agora e no futuro no dom ou serão removidos.
eu uso
fonte
Isso funcionou melhor para mim:
fonte
Eu também encontrei esse problema e o problema de simplesmente hackear o botão Fechar é que ainda preciso acessar os eventos de alerta de fechamento padrão do bootstrap.
Minha solução foi escrever um pequeno plug-in jquery personalizável que injeta um alerta Bootstrap 3 formado corretamente (com ou sem o botão Fechar conforme necessário) com o mínimo de barulho e permite que você o regenere facilmente após o fechamento da caixa.
Consulte https://github.com/davesag/jquery-bs3Alert para uso, testes e exemplos.
fonte
Concordo com a resposta postada por Henrik Karlsson e editada por Martin Prikryl. Tenho uma sugestão, baseada na acessibilidade. Eu adicionaria .attr ("aria-hidden", "true") ao final dele, para que se pareça com:
fonte
Todas as soluções acima usam bibliotecas externas, angular ou jQuery, e uma versão antiga do Bootstrap. Então, aqui está a solução de Charles Wyke-Smith em JavaScript puro , aplicada ao Bootstrap 4 . Sim, o Bootstrap requer jQuery para seu próprio código modal e de alertas, mas nem todo mundo escreve seu próprio código com jQuery.
Aqui está o html do alerta:
Observe que inicialmente o alerta está oculto (
style="display: none;"
) e, em vez do padrãodata-dismiss="alert"
, usamos aquidata-hide="alert"
.Aqui está o JavaScript para mostrar o alerta e substituir o botão Fechar:
Se desejar ocultar ou mostrar o alerta programaticamente em outro lugar no código, basta fazer
myAlert.style.display = 'none';
oumyAlert.style.display = 'block';
.fonte
O problema é causado pelo uso do
style="display:none"
, você deve ocultar o alerta com Javascript ou pelo menos ao exibi-lo, remover o atributo de estilo.fonte
Com base nas outras respostas e na alteração de dispensar dados para ocultar, este exemplo trata da abertura do alerta de um link e permite que o alerta seja aberto e fechado repetidamente
fonte
Eu tentei todos os métodos e a melhor maneira para mim é usar as classes de bootstrap integradas
.fade
e.in
Exemplo:
Nota: Em jQuery, addClass ('in') para mostrar o alerta, removeClass ('in') para ocultá-lo.
Curiosidade: isso funciona para todos os elementos. Não apenas alertas.
fonte
Aqui está uma solução baseada no resposta de Henrik Karlsson, mas com o acionamento de evento adequado (com base em fontes Bootstrap ):
A resposta principalmente para mim, como uma nota.
fonte
Isso não pode ser feito simplesmente adicionando um div "contêiner" adicional e adicionando o div de alerta removido de volta nele a cada vez. Parece funcionar para mim?
HTML
JS
fonte