请确保特定的setInterval函数实例只运行一次
Make sure a specific setInterval function instance is running only once
我正在处理一个div(父级),它有两个其他div(菜单和内容),如下所示:
<div id="parent">
<div id="menu"></div>
<div id="content"></div>
</div>
content-div中加载的内容是一个html文件,它有一些javascript函数,例如每5秒重新加载一次内容的自动刷新。
$(document).ready(function () {
setInterval(function () {
grid.reloadDefaultContent(); //this reloads the content on content div.
}, 5000);
}
页面上有一些链接可以将不同的内容加载到内容分区中。到目前为止还不错,直到我回到"主页",它具有自动刷新功能。问题是,自动刷新从未停止,现在我点击再次返回主页,该功能运行了两次(或者我更改页面并返回主页的次数),从而启动了会话。我正在使用jQuery $.load()
加载页面。
关于如何使setInterval的实例只运行一次,有什么想法吗?
编辑:在阅读了我自己的问题后,我发现它有点不清楚。我的主要问题是,当我回到家时,我的第一个setInterval实例已经在运行,第二个实例开始运行,使5秒的自动刷新速度更快,每次我更改页面并返回家时,它都会越来越快。这不是我想要的行为。我需要的是在更改div上的内容时停止setInterval实例,并在返回主页时重新启动它
这应该做到:
var interval; // make sure that is defined outside of the loaded div content
$(document).ready(function () {
if (typeof interval != "number"){
interval = setInterval(function () {
grid.reloadDefaultContent();
}, 2000);
}
});
它将只启动间隔计时器的一个实例。
如果你只想让它运行一次,为什么不使用"setTimeout()"呢
试试这个:
$(document).ready(function () {
if (!$('body').hasClass('refresh-started')) {
setInterval(function () {
grid.reloadDefaultContent(); //this reloads the content on content div.
}, 5000);
$('body').addClass('refresh-started');
}
}
另一种选择是始终重新启动计时器:
$(document).ready(function() {
clearInterval($('body').data('refresh-interval'));
$('body').data('refresh-interval', setInterval(function() {
grid.reloadDefaultContent(); //this reloads the content on content div.
}, 5000));
});
哪一个更好取决于你的情况。
如果希望代码只运行一次,则应该使用setTimeout()而不是setInterval()
。
用户jQuery的.one()
函数
描述:将处理程序附加到元素的事件。处理程序是每个元素最多执行一次。
$("#foo").one("click", function() {
alert("This will be displayed only once.");
});
在不更改执行setInterval
的源页面的情况下,您唯一的选择似乎是破解grid.reloadDefaultContent
函数,使其只运行一次。如果不了解grid
是如何定义的,就不可能提供任何建议。
- 使用每500ms运行一次的jquery函数是个好主意吗
- For循环在Jquery中只运行一次
- 使函数只运行一次(Javascript)
- 更改路由后,运行一次js脚本
- 只运行一次提取的脚本
- 可能只在for循环内部运行一次代码块
- 在Flask中使用.getJSON请求时,只运行一次命令
- 数据互绑定问题:转换器只运行一次,无法绑定元素的 ID
- setInterval 只在对象方法上运行一次
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- Cordova(Ionic):Splashscreen只在Android上运行一次
- jQuery事件将只运行一次
- 如果发现任何数据,如何停止每7秒运行一次的函数
- 计划每60秒运行一次代码
- 事件只运行一次
- MEANIO群集(共4个)对于计划作业仅运行一次
- 为什么AS3 navigationToURL()只运行一次
- 在nodeJS中每小时运行一次调度作业
- 如何一次运行一次循环javascript
- 在for循环中触发onchange事件只运行一次