Comment fermer automatiquement les alertes en utilisant Twitter Bootstrap

J'utilise le framework CSS Bootstrap de twitter (ce qui est fantastique). Pour certains messages aux utilisateurs, je les affiche en utilisant les alertes Javascript JS et CSS.

Pour les personnes intéressées, il peut être trouvé ici: http://getbootstrap.com/javascript/#alerts

Mon problème est le suivant; après avoir affiché une alerte à un utilisateur, j'aimerais qu'elle disparaisse après un certain intervalle de temps. Basé sur les documents de twitter et le code que j'ai regardé à travers il semble que ce n'est pas cuit dans:

  • ma première question est une demande de confirmation que cela n'est en effet pas cuit dans Bootstrap
  • Deuxièmement, Comment puis-je atteindre ce comportement?
90
demandé sur user 2011-10-04 08:26:49

10 réponses

Appel window.setTimeout(function, delay) vous permettra d'accomplir cette tâche. Voici un exemple qui fermera automatiquement l'alerte 2 secondes (ou 2000 millisecondes) après son affichage.

$(".alert-message").alert();
window.setTimeout(function() { $(".alert-message").alert('close'); }, 2000);

Si vous voulez l'envelopper dans une fonction astucieuse, vous pouvez le faire.

function createAutoClosingAlert(selector, delay) {
   var alert = $(selector).alert();
   window.setTimeout(function() { alert.alert('close') }, delay);
}

Ensuite, vous pouvez l'utiliser comme si...

createAutoClosingAlert(".alert-message", 2000);

Je suis certain qu'il existe des moyens plus élégants pour y parvenir.

107
répondu jessegavin 2012-09-14 14:42:53

Je ne pouvais pas le faire fonctionner avec d'alerte.("fermer"), soit.

Cependant, je l'utilise et cela fonctionne un régal! L'alerte disparaîtra après 5 secondes, et une fois parti, le contenu ci-dessous glissera jusqu'à sa position naturelle.

window.setTimeout(function() {
    $(".alert-message").fadeTo(500, 0).slideUp(500, function(){
        $(this).remove(); 
    });
}, 5000);
97
répondu moogboy 2011-11-15 18:14:18

J'ai eu ce même problème en essayant de gérer les alertes et les effaçant. J'ai cherché dans divers endroits et j'ai trouvé que c'était ma solution. L'ajout et la suppression de la classe' in ' ont résolu mon problème.

window.setTimeout(function() { // hide alert message
    $("#alert_message").removeClass('in'); 

}, 5000);

Lors de l'utilisation .remove() et de même les .solution alert ('close') j'ai semblé rencontrer un problème avec la suppression de l'alerte du document, donc si je voulais utiliser à nouveau la même alerte div, j'étais incapable de le faire. Cette solution signifie que l'alerte est réutilisable sans rafraîchir la page. (J'ai été utiliser aJax pour soumettre un formulaire et présenter des commentaires à l'utilisateur)

    $('#Some_Button_Or_Event_Here').click(function () { // Show alert message
        $('#alert_message').addClass('in'); 
    });
3
répondu Mark Daniel 2013-10-20 15:19:24

L'utilisation de l'action 'close' sur l'Alerte ne fonctionne pas pour moi, car elle supprime l'alerte du DOM et j'ai besoin de l'alerte plusieurs fois (je poste des données avec ajax et je montre un message à l'utilisateur sur chaque post). J'ai donc créé cette fonction qui crée l'alerte chaque fois que j'en ai besoin, puis démarre une minuterie pour fermer l'Alerte créée. Je passe dans la fonction l'id du conteneur auquel je veux ajouter l'alerte, le type d'alerte ('success', 'danger', etc.) et le message. Ici est mon code:

function showAlert(containerId, alertType, message) {
    $("#" + containerId).append('<div class="alert alert-' + alertType + '" id="alert' + containerId + '">' + message + '</div>');
    $("#alert" + containerId).alert();
    window.setTimeout(function () { $("#alert" + containerId).alert('close'); }, 2000);
}
3
répondu Daniele Armanasco 2013-11-25 16:28:06

C'est la version coffescript:

setTimeout ->
 $(".alert-dismissable").fadeTo(500, 0).slideUp(500, -> $(this.remove()))
,5000
2
répondu Johniboy 2013-11-12 22:35:07

Avec chacune des solutions ci-dessus, j'ai continué à perdre la réutilisabilité de l'alerte. Ma solution était la suivante:

Au chargement de la page

$("#success-alert").hide();

Une fois que l'alerte devait être affichée

 $("#success-alert").show();
 window.setTimeout(function () {
     $("#success-alert").slideUp(500, function () {
          $("#success-alert").hide();
      });
 }, 5000);

Notez que fadeTo définit l'opacité sur 0, donc l'affichage était none et l'opacité était 0, c'est pourquoi j'ai retiré de ma solution.

2
répondu biggles 2016-01-15 03:39:39

Après avoir passé en revue certaines des réponses ici et dans un autre fil, voici ce que j'ai fini avec:

J'ai créé une fonction nommée showAlert() qui ajouterait dynamiquement une alerte, avec une option type et closeDealy. De sorte que vous pouvez, par exemple, ajouter une alerte de type danger (c'est-à-dire, alert-danger de Bootstrap) qui se fermera automatiquement après 5 secondes comme ceci:

showAlert("Warning message", "danger", 5000);

Pour y parvenir, ajoutez la fonction Javascript suivante:

function showAlert(message, type, closeDelay) {

    if ($("#alerts-container").length == 0) {
        // alerts-container does not exist, add it
        $("body")
            .append( $('<div id="alerts-container" style="position: fixed;
                width: 50%; left: 25%; top: 10%;">') );
    }

    // default to alert-info; other options include success, warning, danger
    type = type || "info";    

    // create the alert div
    var alert = $('<div class="alert alert-' + type + ' fade in">')
        .append(
            $('<button type="button" class="close" data-dismiss="alert">')
            .append("&times;")
        )
        .append(message);

    // add the alert div to top of alerts-container, use append() to add to bottom
    $("#alerts-container").prepend(alert);

    // if closeDelay was passed - set a timeout to close the alert
    if (closeDelay)
        window.setTimeout(function() { alert.alert("close") }, closeDelay);     
}
0
répondu isapir 2015-11-12 01:59:38

J'avais besoin d'une solution très simple pour cacher quelque chose après un certain temps et j'ai réussi à faire fonctionner cela:

Angulaire, vous pouvez faire ceci:

$timeout(self.hideError,2000);

Voici la fonction que j'appelle lorsque le délai d'attente a été atteint

 self.hideError = function(){
   self.HasError = false;
   self.ErrorMessage = '';
};

Alors maintenant, ma boîte de dialogue / interface utilisateur peut utiliser ces propriétés pour masquer les éléments.

0
répondu leeroya 2016-06-02 08:31:38

Avec retard et fondu:

setTimeout(function(){
    $(".alert").each(function(index){
        $(this).delay(200*index).fadeTo(1500,0).slideUp(500,function(){
            $(this).remove();
        });
    });
},2000);
0
répondu GigolNet Guigolachvili 2017-01-29 19:44:04

Essayez celui-ci

$(function () {

 setTimeout(function () {
            if ($(".alert").is(":visible")){
                 //you may add animate.css class for fancy fadeout
                $(".alert").fadeOut("fast");
            }

        }, 3000)

});
0
répondu danny 2018-01-30 21:39:23