【问题标题】:setTimeout runs only once then not workingsetTimeout 只运行一次然后不工作
【发布时间】:2022-01-22 22:15:06
【问题描述】:

我得到了JS,如下所示。我希望所有 bootstrap alerts 在 1 秒后消散。它仅适用于one time,但是当我添加更多警报时,它们会保持原样。这是什么原因?

$(document).ready(function () {
function flashh(message, category) {
    if (category == "error") {
      var icon = "icon-exclamation-sign";
      category = "danger";
    } else if (category == "success") var icon = "icon-ok-sign";
    else var icon = "icon-info-sign";
    $(
      '<div class="alert alert-' +
        category +
        '"><i class="' +
        icon +
        '"></i>&nbsp;<a class="close" data-dismiss="alert">×</a>' +
        message +
        "</div>"
    ).prependTo("#putFlashMsg");
  }
});

设置超时:

$(document).ready(function () {
  window.setTimeout(function () {
    $(".alert")
      .fadeTo(1000, 0)
      .slideUp(1000, function () {
        $(this).remove();
      });
  }, 5000);
});

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    那是因为setTimeout 只被调用一次。如果要进行多次调用,请使用setInterval,它的使用方式完全相同,但会一直调用到clearInterval 停止为止。

    【讨论】:

    • 你的意思是clearInterval ;-)
    • 你能根据我的代码准确显示我应该在哪里实现什么吗?
    • 将您的setTimeout 替换为setInterval,其余部分保持原样。
    • 谢谢,解决了我的问题。我将此标记为答案。你可以简单地查看我的其他帖子吗?:stackoverflow.com/questions/70433262/…
    【解决方案2】:

    setTimeout 只运行一次,您要查找的是 setInterval,它每 n 秒运行一次,直到停止。

    $(document).ready(function () {
        window.setInterval(function () {
            $(".alert")
              .fadeTo(1000, 0)
              .slideUp(1000, function () {
                  $(this).remove();
             });
         }, 5000);
    });
    

    【讨论】:

    • 那不行;我拿走了你的代码,现在没有警报消散器
    【解决方案3】:

    每当您添加警报时,您还应该创建一个新的setTimeoutsetTimeout 应该在“flashh”函数中。

    function flashh(message, category) {
        if (category == "error") {
          var icon = "icon-exclamation-sign";
          category = "danger";
        } else if (category == "success") var icon = "icon-ok-sign";
        else var icon = "icon-info-sign";
        var alert = $(
          '<div class="alert alert-' +
            category +
            '"><i class="' +
            icon +
            '"></i>&nbsp;<a class="close" data-dismiss="alert">×</a>' +
            message +
            "</div>"
        )
        window.setTimeout(function () {
            alert
              .fadeTo(1000, 0)
              .slideUp(1000, function () {
                  $(this).remove();
             });
        }, 5000);
        alert.prependTo("#putFlashMsg");
      }
    

    【讨论】:

    • 我认为有一个错字,因为在我实施了您的解决方案后,甚至没有显示任何警报
    • 你有什么错误吗?
    • 没有。就在您实施之后,我什至看不到我的警报
    猜你喜欢
    • 2011-12-13
    • 2017-01-24
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2022-01-14
    • 2018-06-18
    相关资源
    最近更新 更多