删除和添加Bootstrap 4警报类会中断警报类型

时间:2020-05-04 08:22:23

标签: javascript jquery css bootstrap-4

我正在使用Bootstrap 4为Web应用程序创建警报系统。这是我的代码:

function bsalert(str1, str2) {

    $(".alert").addClass('show');

    $(".alert").addClass('alert-'+str1);

    $('.alert').html(str2);

    setTimeout( function() {
        $(".alert").removeClass('show');
        $(".alert").removeClass('alert-'+str1);
    }, 2000 );

}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">


<div class="alert alert-dismissible fade text-center" role="alert" id="alert"></div>

<button type="button" class="btn btn-outline-primary" onclick="bsalert('danger', 'ALERT!');">one</button>

<button type="button" class="btn btn-outline-primary" onclick="bsalert('success', 'nice');">two</button>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

我遇到的问题是,如果您做得太快,在计时器删除该类之前,它将破坏更改警报类型的能力。我怎样才能解决这个问题? Bootstrap是否具有更好的内置功能?

编辑:在此示例中,我简化了警报类型的数量,实际上不仅仅是dangersuccess

2 个答案:

答案 0 :(得分:0)

我希望它对您有帮助

var timer;
function bsalert(str1, str2) {

      clearTimeout(timer)
      $(".alert").removeClass('show');
      $(".alert").removeClass('alert-danger');
      $(".alert").removeClass('alert-success');

    $(".alert").addClass('show');

    $(".alert").addClass('alert-'+str1);

    $('.alert').html(str2);
    
    timer=setTimeout( function() {
        $(".alert").removeClass('show');
        $(".alert").removeClass('alert-'+str1);
    }, 2000 );

}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">


<div class="alert alert-dismissible fade text-center" role="alert" id="alert"></div>

<button type="button" class="btn btn-outline-primary" onclick="bsalert('danger', 'ALERT!');">one</button>

<button type="button" class="btn btn-outline-primary" onclick="bsalert('success', 'nice');">two</button>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

答案 1 :(得分:0)

现在,如果您使用设置超时功能,则警报将在2秒间隔内隐藏,因此,如果连续多次单击通知,它将仍在2秒内隐藏元素,从而可以在您看到它的位置创建效果迅速消失,几乎没有解决方案:针对每个通知发布具有不同id的元素,或者限制函数调用或在两秒钟后延迟它,或者禁用通知按钮2秒钟,以便调用通知仅每2秒之后,您还可以使用javascript的清除超时功能。

var timeoutElem;

function bsalert(str1, str2) {
  var alertClassString = 'alert-' + str1;
  var existingClass = '';
  clearTimeout(timeoutElem);
  existingClass = (str1 === "danger") ? 'alert-success' : 'alert-danger';
  $(".alert").removeClass(existingClass);
  $(".alert").addClass(alertClassString);
  $(".alert").removeClass('show');
  $(".alert").addClass('show');
  $('.alert').html(str2);
  timeoutElem = setTimeout(function() {
    $(".alert").removeClass('show');
  }, 2000);
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">


<div class="alert alert-dismissible fade text-center" role="alert" id="alert"></div>

<button type="button" class="btn btn-outline-primary" onclick="bsalert('danger', 'ALERT!');">one</button>

<button type="button" class="btn btn-outline-primary" onclick="bsalert('success', 'nice');">two</button>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>