【问题标题】:How to auto close an alert after few seconds with Bootstrap?如何使用 Bootstrap 在几秒钟后自动关闭警报?
【发布时间】:2022-01-11 00:25:32
【问题描述】:

我开发了一个 Python/Flask 应用程序,但在实现 Bootstrap 警报时遇到了问题,其想法是:

  • 可通过关闭按钮关闭。
  • 如果不采取任何操作,则在 2 秒后淡出并关闭。

代码

<div class="container">
        {% for message in get_flashed_messages() %}   
        <script>       
          function close_alert()
          {
            document.getElementById("my_alert").close()
          }
          setTimeout("close_alert()", 2000)
        </script>
        <div id="my_alert" class="alert alert-primary alert-dismissible fade show" role="alert">
          <strong>{{message}}</strong>
          <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
        {% endfor %}
</div>

我是 Bootstrap 的新手,如果能得到任何支持,我将不胜感激!

谢谢!

【问题讨论】:

  • 您可以在 close_alert 函数中使用.hide() 而不是.close()

标签: javascript html twitter-bootstrap alert auto-close


【解决方案1】:

您可以使用 Bootstrap 方法来实现这一点。 Take a look here在页面底部了解更多信息。

逻辑

当按钮被点击时,jQuery 会移除 alert 元素的 d-none 类,使其可见。然后使用setTimeout() JS 将等待 2000 毫秒,然后使用alert() bootstrap 4 方法关闭警报。

只需单击一下即可。

注意:使用Bootstrap 4 方法需要使用jQuery。

$('#btn').click(function(){

  $('#alert').removeClass('d-none');
  
  setTimeout(() => {
    $('.alert').alert('close');
  }, 2000);
  
})
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" crossorigin="anonymous">
 
<div id="alert" class="alert alert-primary m-3 d-none" role="alert">
  This is a primary alert—check it out!
</div>

<button class="btn btn-primary m-3" id="btn">
  show alert and close it in 2 seconds
</button>

使用纯 JavaScript

此代码将在用户每次单击按钮时显示警报。如果您不希望这样,您可以使用布尔值或会话存储变量与条件语句相结合,使其仅工作一次。

const btn = document.getElementById('btn'),
      alert = document.getElementById('alert');
      
btn.addEventListener('click', () => {
  
  alert.classList.remove('d-none');
  
  setTimeout(() => {
    alert.classList.add('d-none');
  }, 2000)
  
})
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" crossorigin="anonymous">
 
<div id="alert" class="alert alert-primary m-3 d-none" role="alert">
  This is a primary alert—check it out!
</div>

<button id="btn" class="btn btn-primary m-3">
  show alert and close it in 2 seconds
</button>

【讨论】:

  • 谢谢,@Gass!我想我的引导加载程序有问题,因为我试图使用 v5 执行此操作,现在我切换到 v4.6 并使用了您的建议,一切正常。我对代码做了一些小的改动以满足我的需要:
  • HTML -> ""
  • JS -> "setTimeout(function(){$('.alert').alert('close')}, 2000)"
  • @ftani 是的,这就是你所需要的。我必须添加更多代码才能让它在这里工作。我很高兴它有所帮助。
【解决方案2】:

我建议使用“toast”——这是一个用于您的用例的 UI 组件:https://getbootstrap.com/docs/4.2/components/toasts/

来自 Bootstrap 文档:

<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
  <div class="toast-header">
    <img src="..." class="rounded mr-2" alt="...">
    <strong class="mr-auto">Bootstrap</strong>
    <small class="text-muted">11 mins ago</small>
    <button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="toast-body">
    Hello, world! This is a toast message.
  </div>
</div>

【讨论】:

  • 谢谢@Matt Morgan!对于我想到的项目,Alert 比 Toast 更合适。
猜你喜欢
  • 1970-01-01
  • 2011-11-30
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多