Как автоматически закрывать оповещения с помощью Twitter Bootstrap - PullRequest
90 голосов
/ 04 октября 2011

Я использую твиттер-фреймворк для начальной загрузки (это фантастика)Для некоторых сообщений пользователям я отображаю их с помощью предупреждений Javascript JS и CSS.

Для тех, кто заинтересован, его можно найти здесь: http://getbootstrap.com/javascript/#alerts

Моя проблема заключается в следующем;после того, как я отобразил предупреждение пользователю, я хотел бы, чтобы он просто исчез через некоторое время.Судя по документам твиттера и коду, который я просмотрел, похоже, что он не запечен в:

  • Мой первый вопрос - запрос на подтверждение того, что это действительно НЕ запечено в Bootstrap
  • Во-вторых, как мне добиться этого поведения?

Ответы [ 10 ]

108 голосов
/ 04 октября 2011

Вызов window.setTimeout(function, delay) позволит вам сделать это.Вот пример, который автоматически закроет предупреждение через 2 секунды (или 2000 миллисекунд) после его отображения.

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

Если вы хотите обернуть его в изящную функцию, вы можете сделать это.

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

Тогда вы могли бы использовать это так ...

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

Я уверен, что есть более изящные способы сделать это.

99 голосов
/ 15 ноября 2011

Я не мог заставить его работать с предупреждением. ('Закрыть') либо.

Однако я использую это, и это работает удовольствие!Через 5 секунд оповещение исчезнет, ​​и после его удаления содержимое под ним переместится в свое естественное положение.

window.setTimeout(function() {
    $(".alert-message").fadeTo(500, 0).slideUp(500, function(){
        $(this).remove(); 
    });
}, 5000);
4 голосов
/ 20 октября 2013

У меня была такая же проблема при попытке обработать всплывающие оповещения и их исчезновение.Я искал в разных местах и ​​нашел, что это мое решение.Добавление и удаление класса «in» устранило мою проблему.

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

}, 5000);

При использовании .remove () и аналогичного решения .alert ('close') я, похоже, столкнулся с проблемой удаления оповещениядокумент, поэтому, если я захочу снова использовать тот же элемент оповещения, я не смог.Это решение означает, что предупреждение можно использовать повторно без обновления страницы.(Я использовал aJax для отправки формы и представления отзыва пользователю)

    $('#Some_Button_Or_Event_Here').click(function () { // Show alert message
        $('#alert_message').addClass('in'); 
    });
3 голосов
/ 25 ноября 2013

Использование действия «Закрыть» для оповещения не работает для меня, поскольку оно удаляет оповещение из DOM, и мне нужно оповещение несколько раз (я публикую данные с помощью ajax и показываю сообщение пользователю накаждый пост).Поэтому я создал эту функцию, которая создает оповещение каждый раз, когда мне это нужно, а затем запускает таймер для закрытия созданного оповещения.Я передаю в функцию идентификатор контейнера, к которому я хочу добавить предупреждение, тип предупреждения («успех», «опасность» и т. Д.) И сообщение.Вот мой код:

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);
}
2 голосов
/ 15 января 2016

С каждым из приведенных выше решений я продолжал терять возможность повторного использования оповещения. Мое решение было следующим:

На странице загрузки

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

Как только необходимо отобразить предупреждение

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

Обратите внимание, что fadeTo устанавливает непрозрачность на 0, поэтому отображение было нулевым, а непрозрачность была 0, поэтому я удалил из своего решения.

2 голосов
/ 13 ноября 2013

Это версия coffescript:

setTimeout ->
 $(".alert-dismissable").fadeTo(500, 0).slideUp(500, -> $(this.remove()))
,5000
0 голосов
/ 31 января 2018

попробуйте это

$(function () {

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

        }, 3000)

});
0 голосов
/ 29 января 2017

с задержкой и замиранием:

setTimeout(function(){
    $(".alert").each(function(index){
        $(this).delay(200*index).fadeTo(1500,0).slideUp(500,function(){
            $(this).remove();
        });
    });
},2000);
0 голосов
/ 02 июня 2016

Мне нужно было очень простое решение, чтобы скрыть что-то через некоторое время, и мне удалось заставить это работать:

В угловом режиме вы можете сделать это:

$timeout(self.hideError,2000);

Вот функция, которую явызов по истечении времени ожидания

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

Так что теперь мой диалог / пользовательский интерфейс может использовать эти свойства, чтобы скрыть элементы.

0 голосов
/ 12 ноября 2015

Перебрав некоторые ответы здесь и в другой теме, я получил вот что:

Я создал функцию с именем showAlert(), которая будет динамически добавлять оповещение с необязательным typeи closeDealy.Так что вы можете, например, добавить предупреждение типа danger (то есть, опасность предупреждения Bootstrap), которое автоматически закроется через 5 секунд, например:

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

Для этого добавьте следующееФункция JavaScript:

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);     
}
...