setTimeout 只运行一次然后不工作

Posted

技术标签:

【中文标题】setTimeout 只运行一次然后不工作【英文标题】:setTimeout runs only once then not working 【发布时间】: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);
);

【问题讨论】:

【参考方案1】:

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

【讨论】:

你的意思是clearInterval ;-) 你能根据我的代码准确显示我应该在哪里实现什么吗? 将您的setTimeout 替换为setInterval,其余部分保持原样。 谢谢,解决了我的问题。我将此标记为答案。你可以简单地查看我的其他帖子吗?:***.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");
  

【讨论】:

我认为有一个错字,因为在我实施了您的解决方案后,甚至没有显示任何警报 你有什么错误吗? 没有。就在您实施之后,我什至看不到我的警报

以上是关于setTimeout 只运行一次然后不工作的主要内容,如果未能解决你的问题,请参考以下文章

element-ui简单的倒计时

javascript中定时器的使用

为啥这种写法,js的setTimeout只执行一次?

setTimeout 在 forEach 中不起作用

点击事件上的 JQuery 只工作一次

为啥框架集中两个子页面不能同时运行settimeout或者setInterval函数