La eliminación de datos elimina por completo el elemento. En su lugar, use el método .hide () de jQuery.
El método de arreglarlo rápido:
Usando javascript en línea para ocultar el elemento al hacer clic así:
<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/
Sin embargo, esto solo debe usarse si eres vago (lo cual no es bueno si quieres una aplicación que se pueda mantener).
El método de hacerlo bien:
Cree un nuevo atributo de datos para ocultar un elemento.
Javascript:
$(function(){
$("[data-hide]").on("click", function(){
$("." + $(this).attr("data-hide")).hide()
// -or-, see below
// $(this).closest("." + $(this).attr("data-hide")).hide()
})
})
y luego cambie el descarte de datos a ocultar datos en el marcado. Ejemplo en jsfiddle .
$("." + $(this).attr("data-hide")).hide()
Esto ocultará todos los elementos con la clase especificada en data-hide, es decir: data-hide="alert"
ocultará todos los elementos con la clase de alerta.
Xeon06 proporcionó una solución alternativa:
$(this).closest("." + $(this).attr("data-hide")).hide()
Esto solo ocultará el elemento padre más cercano. Esto es muy útil si no desea asignar a cada alerta una clase única. Sin embargo, tenga en cuenta que debe colocar el botón de cierre dentro de la alerta.
Definición de .closest de jquery doc :
Para cada elemento del conjunto, obtenga el primer elemento que coincida con el selector probando el elemento en sí y recorriendo sus antepasados en el árbol DOM.
alert
) en la página. Una solución para esto sería reemplazar el contenido de la devolución de llamada con esta línea$(this).closest("." + $(this).attr("data-hide")).hide();
, que solo afectará al elemento principal más cercano, ya que el botón de descarte generalmente se coloca dentro de la alerta que afecta.Acabo de usar una variable de modelo para mostrar / ocultar el diálogo y eliminé el
data-dismiss="alert"
Ejemplo:
funciona para mí y detiene la necesidad de salir a jquery
fuente
Creo que un buen enfoque para este problema sería aprovechar el
close.bs.alert
tipo de evento de Bootstrap para ocultar la alerta en lugar de eliminarla. La razón por la que Bootstrap expone este tipo de evento es para que pueda sobrescribir el comportamiento predeterminado de eliminar la alerta del DOM.fuente
Si está utilizando una biblioteca MVVM como knockout.js (que recomiendo encarecidamente) puede hacerlo de forma más limpia:
http://jsfiddle.net/bce9gsav/5/
fuente
data-bind="click:function(){showAlert(false);}
es un ejemplo perfecto de javascript intrusivo que está lejos de ser más limpio . Recomiendo encarecidamente NO seguir este enfoquedata-bind
atributo algo controvertido stackoverflow.com/questions/13451414/unobtrusive-knockoutEntonces, si desea una solución que pueda hacer frente a páginas html dinámicas, como ya lo incluye, debe usar jQuery's live para configurar el controlador en todos los elementos que están ahora y en el futuro en el dom o se eliminan.
yo suelo
fuente
Esto funcionó mejor para mí:
fuente
También encontré este problema y el problema de simplemente piratear el botón de cierre es que todavía necesito acceso a los eventos de cierre de alerta de arranque estándar.
Mi solución fue escribir un pequeño complemento de jquery personalizable que inyecta una alerta Bootstrap 3 correctamente formada (con o sin botón de cierre, según lo necesite) con un mínimo de alboroto y le permite regenerarlo fácilmente después de cerrar la caja.
Consulte https://github.com/davesag/jquery-bs3Alert para ver el uso, las pruebas y los ejemplos.
fuente
Estoy de acuerdo con la respuesta publicada por Henrik Karlsson y editada por Martin Prikryl. Tengo una sugerencia basada en la accesibilidad. Agregaría .attr ("aria-hidden", "true") al final, para que se vea así:
fuente
Todas las soluciones anteriores utilizan bibliotecas externas, ya sean angulares o jQuery, y una versión anterior de Bootstrap. Entonces, aquí está la solución de Charles Wyke-Smith en JavaScript puro , aplicada a Bootstrap 4 . Sí, Bootstrap requiere jQuery para su propio código modal y de alertas, pero ya no todos escriben su propio código con jQuery.
Aquí está el html de la alerta:
Tenga en cuenta que inicialmente la alerta está oculta (
style="display: none;"
), y en lugar del estándardata-dismiss="alert"
, hemos utilizado aquídata-hide="alert"
.Aquí está el JavaScript para mostrar la alerta y anular el botón de cierre:
Si desea ocultar o mostrar la alerta mediante programación en otra parte del código, simplemente haga
myAlert.style.display = 'none';
omyAlert.style.display = 'block';
.fuente
El problema se debe al uso de
style="display:none"
, debe ocultar la alerta con Javascript o al menos al mostrarla, eliminar el atributo de estilo.fuente
Según las otras respuestas y el cambio de descartar datos a ocultar datos, este ejemplo maneja la apertura de la alerta desde un enlace y permite que la alerta se abra y cierre repetidamente.
fuente
Probé todos los métodos y la mejor manera para mí es usar las clases de arranque integradas
.fade
y.in
Ejemplo:
Nota: En jQuery, addClass ('in') para mostrar la alerta, removeClass ('in') para ocultarla.
Dato curioso: esto funciona para todos los elementos. No solo alertas.
fuente
Aquí hay una solución basada en la respuesta de Henrik Karlsson pero con la activación de eventos adecuada (basada en fuentes de Bootstrap ):
La respuesta principalmente para mí, como una nota.
fuente
¿No se puede hacer esto simplemente agregando un div "contenedor" adicional y agregando el div de alerta eliminado nuevamente en él cada vez? ¿Parece funcionar para mi?
HTML
JS
fuente