it-swarm.com.ru

Как автоматически закрывать оповещения с помощью Twitter Bootstrap

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

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

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

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

Вызов 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);

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

107
jessegavin

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

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

window.setTimeout(function() {
    $(".alert-message").fadeTo(500, 0).slideUp(500, function(){
        $(this).remove(); 
    });
}, 5000);
98
moogboy

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

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

}, 5000);

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

    $('#Some_Button_Or_Event_Here').click(function () { // Show alert message
        $('#alert_message').addClass('in'); 
    });
4
Mark Daniel

Использование действия «Закрыть» для предупреждения не работает для меня, потому что оно удаляет предупреждение из 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);
}
3
Daniele Armanasco

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

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

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

После того, как предупреждение должно было отображаться

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

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

2
biggles

Это версия coffescript:

setTimeout ->
 $(".alert-dismissable").fadeTo(500, 0).slideUp(500, -> $(this.remove()))
,5000
2
Johniboy

попробуй это

$(function () {

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

        }, 3000)

});
0
danny

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

setTimeout(function(){
    $(".alert").each(function(index){
        $(this).delay(200*index).fadeTo(1500,0).slideUp(500,function(){
            $(this).remove();
        });
    });
},2000);
0
GigolNet Guigolachvili

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

Я создал функцию с именем 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);     
}
0
isapir

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

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

$timeout(self.hideError,2000);

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

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

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

0
leeroya