如何使用Twitter Bootstrap自动closures警报

我使用twitter的引导CSS框架(这是太棒了)。 对于一些给用户的消息,我使用警告JavaScript JS和CSS显示它们。

对于那些感兴趣的,可以在这里find: http : //getbootstrap.com/javascript/#alerts

我的问题是这个; 在向用户显示警告之后,我希望在一段时间之后才会离开。 基于Twitter的文档和我通过它看的代码看起来像这不是在:

  • 我的第一个问题是一个请求确认,这确实不被引入Bootstrap
  • 其次,我怎么能做到这一点?

调用window.setTimeout(function, delay)将允许您完成此操作。 下面是一个示例,它将在显示后自动closures警报2秒(或2000毫秒)。

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

如果你想包装它在一个漂亮的function,你可以做到这一点。

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

那么你可以像这样使用它…

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

我相信有更多的优雅的方法来完成这一点。

我无法使用alert('close')。

不过,我正在使用这个,它可以工作! 警报将在5秒后消失,一旦消失,下面的内容将滑动到自然位置。

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

当我尝试处理爆出警报并将其消除时,我也遇到了同样的问题。 我search了各地,发现这是我的解决scheme。 添加和删​​除“in”类修复了我的问题。

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

当使用.remove()和类似的.alert('close')解决scheme时,我似乎遇到了从文档中删除警报的问题,所以如果我想再次使用相同的警告div,我无法。 此解决scheme意味着警报可以重新使用,而无需刷新页面。 (我正在使用Ajax来提交表单并向用户提供反馈)

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

在警报上使用“close”操作对我来说不起作用,因为它会从DOM中删除警报,我需要多次警报(我使用ajax发布数据,并且在每个post中向用户显示一条消息) 。 所以我创build了这个函数,每次需要时都会创build一个警报,然后启动一个计时器来closures创build的警报。 我将函数传递给我要添加警报的容器的id,警告的types('success','danger'等)和消息。 这是我的代码:

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

我实现了一个JavaScript库,它具有你所要求的function: https : //gist.github.com/1569896

这是coffescript版本:

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

随着上述每个解决scheme,我继续失去警报的可用性。 我的解决scheme如下:

在页面加载

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

一旦警报需要显示

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

请注意,fadeTo将不透明度设置为0,所以显示为none,不透明度为0,这就是为什么我从我的解决scheme中删除。

它似乎已经坏了。 我在这里用一个testing用例报告了这个问题: https : //github.com/twitter/bootstrap/issues/366

你可以在这里查看我的代码: http : //jsdo.it/rfkrocktk/bRrV

在这里回答一些在另一个线程的答案,这是我最后的结果:

我创build了一个名为showAlert()的函数,它将dynamic地添加一个警报,使用可选typecloseDealy 。 例如,你可以添加一个警告types的danger (即Bootstrap的警报危险),5秒后会自动closures,如下所示:

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

我需要一个非常简单的解决scheme来隐藏某些东西,并设法让这个工作:

在angular度你可以做到这一点:

 $timeout(self.hideError,2000); 

这是我在达到超时时调用的函数

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

所以现在我的dialog / ui可以使用这些属性来隐藏元素。

随着延迟和淡入淡出:

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