Le rejet des données supprime complètement l'élément. Utilisez plutôt la méthode .hide () de jQuery.
La méthode fix-it-quick:
Utilisation de javascript en ligne pour masquer l'élément en cliquant comme ceci:
<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/
Cela ne devrait cependant être utilisé que si vous êtes paresseux (ce qui n'est pas une bonne chose si vous voulez une application maintenable).
La méthode do-it-right:
Créez un nouvel attribut de données pour masquer un élément.
Javascript:
$(function(){
$("[data-hide]").on("click", function(){
$("." + $(this).attr("data-hide")).hide()
// -or-, see below
// $(this).closest("." + $(this).attr("data-hide")).hide()
})
})
puis remplacez les données par masquer les données dans le balisage. Exemple à jsfiddle .
$("." + $(this).attr("data-hide")).hide()
Cela masquera tous les éléments avec la classe spécifiée dans data-hide, c'est-à-dire: data-hide="alert"
masquera tous les éléments avec la classe alert.
Xeon06 a fourni une solution alternative:
$(this).closest("." + $(this).attr("data-hide")).hide()
Cela ne masquera que l'élément parent le plus proche. Ceci est très utile si vous ne souhaitez pas attribuer à chaque alerte une classe unique. Veuillez noter que, cependant, vous devez placer le bouton de fermeture dans l'alerte.
Définition de .closest de jquery doc :
Pour chaque élément de l'ensemble, obtenez le premier élément qui correspond au sélecteur en testant l'élément lui-même et en parcourant ses ancêtres dans l'arborescence DOM.
alert
) sur la page. Une solution pour cela serait de remplacer le contenu du rappel par cette ligne$(this).closest("." + $(this).attr("data-hide")).hide();
, ce qui n'affectera que l'élément parent le plus proche, étant donné que le bouton de rejet est généralement placé dans l'alerte qu'il affecte.Je viens d'utiliser une variable de modèle pour afficher / masquer la boîte de dialogue et supprimer le
data-dismiss="alert"
Exemple:
fonctionne pour moi et arrête le besoin d'aller à jquery
la source
Je pense qu'une bonne approche à ce problème serait de profiter du
close.bs.alert
type d'événement de Bootstrap pour masquer l'alerte au lieu de la supprimer. La raison pour laquelle Bootstrap expose ce type d'événement est que vous pouvez remplacer le comportement par défaut de suppression de l'alerte du DOM.la source
Si vous utilisez une bibliothèque MVVM telle que knockout.js (que je recommande vivement), vous pouvez le faire plus proprement:
http://jsfiddle.net/bce9gsav/5/
la source
data-bind="click:function(){showAlert(false);}
est un exemple parfait de javascript intrusif qui est loin d'être plus propre . Je recommande fortement de NE PAS suivre cette approchedata-bind
attribut quelque peu controversé stackoverflow.com/questions/13451414/unobtrusive-knockoutDonc, si vous voulez une solution capable de gérer les pages html dynamiques, comme vous l'incluez déjà, vous devez utiliser live de jQuery pour définir le gestionnaire sur tous les éléments qui sont maintenant et à l'avenir dans le dom ou qui sont supprimés.
j'utilise
la source
Cela a fonctionné le mieux pour moi:
la source
J'ai également rencontré ce problème et le problème avec le simple piratage du bouton de fermeture est que j'ai toujours besoin d'accéder aux événements de fermeture d'alerte d'amorçage standard.
Ma solution était d'écrire un petit plugin jquery personnalisable qui injecte une alerte Bootstrap 3 correctement formée (avec ou sans bouton de fermeture selon vos besoins) avec un minimum de tracas et vous permet de le régénérer facilement après la fermeture de la boîte.
Voir https://github.com/davesag/jquery-bs3Alert pour l'utilisation, les tests et les exemples.
la source
Je suis d'accord avec la réponse publiée par Henrik Karlsson et éditée par Martin Prikryl. J'ai une suggestion, basée sur l'accessibilité. J'ajouterais .attr ("aria-hidden", "true") à la fin, pour qu'il ressemble à:
la source
Toutes les solutions ci-dessus utilisent des bibliothèques externes, angular ou jQuery, et une ancienne version de Bootstrap. Voici donc la solution de Charles Wyke-Smith en pur JavaScript , appliquée à Bootstrap 4 . Oui, Bootstrap nécessite jQuery pour son propre code modal et d'alertes, mais tout le monde n'écrit plus son propre code avec jQuery.
Voici le html de l'alerte:
Notez qu'au départ l'alerte est masquée (
style="display: none;"
), et à la place du standarddata-dismiss="alert"
, nous l'avons ici utilisédata-hide="alert"
.Voici le JavaScript pour afficher l'alerte et remplacer le bouton de fermeture:
Si vous souhaitez masquer ou afficher l'alerte par programmation ailleurs dans le code, faites simplement
myAlert.style.display = 'none';
oumyAlert.style.display = 'block';
.la source
Le problème est causé par l'utilisation de
style="display:none"
, vous devez masquer l' alerte avec Javascript ou du moins lors de son affichage, supprimer l'attribut style.la source
Sur la base des autres réponses et de la modification des données rejetées par masquage des données, cet exemple gère l'ouverture de l'alerte à partir d'un lien et permet à l'alerte d'être ouverte et fermée à plusieurs reprises
la source
J'ai essayé toutes les méthodes et le meilleur moyen pour moi est d'utiliser les classes bootstrap intégrées
.fade
et.in
Exemple:
Remarque: dans jQuery, addClass ('in') pour afficher l'alerte, removeClass ('in') pour la masquer.
Fait amusant: cela fonctionne pour tous les éléments. Pas seulement des alertes.
la source
Voici une solution basée sur la réponse d' Henrik Karlsson mais avec un déclenchement d'événement approprié (basé sur les sources Bootstrap ):
La réponse principalement pour moi, en guise de note.
la source
Cela ne peut-il pas être fait simplement en ajoutant un div "conteneur" supplémentaire et en y ajoutant à chaque fois le div d'alerte supprimé. Semble travailler pour moi?
HTML
JS
la source