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> <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】:每当您添加警报时,您还应该创建一个新的setTimeout
; setTimeout
应该在“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> <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 只运行一次然后不工作的主要内容,如果未能解决你的问题,请参考以下文章