确保一次只运行一个 setTimeout(处于活动状态)
Ensure only one setTimeout runs (is active) at a time?
递归setTimeout
函数getRandomProducts在html body标签中被称为onload
,因此不断迭代.
函数setCategoryTree是从导航栏的嵌套ul中的链接onclick
调用的。然后,此函数将变量 mainCategory 传递给 getRandomProducts,其中变量被全局声明以保持其初始化。
...因此,我正在尝试做的是在单击导航栏中的链接时重置getRandomProducts函数,并从单击的链接中传递类别名称。但是,clearTimeout
似乎不起作用,因此迭代发生的频率要高得多,因为同时执行多个递归循环.
不仅如此,我的全局变量没有按预期存储来自setCategoryTree的数据(基本上我尝试使用全局变量类似于静态变量)。我已经通过注释掉的window.alert
辨别了所有这些行为.
这是相关的Javascript代码:
var mainCategory = ""; // initialized from setCategoryTree
var category = mainCategory;
function getRandomProducts(category)
{
//window.alert(category);
if(typeof category == "undefined")
category = "all";
else
clearTimeout(t);
var req = new XMLHttpRequest();
var products = document.getElementById("products");
req.onreadystatechange = function()
{
if( (req.readyState == 4) && (req.status == 200) )
{
var result = req.responseText;
products.innerHTML = result;
}
}
req.open("GET", "default.php?category=" + category, true);
req.send(null);
var t = setTimeout("getRandomProducts()", 1000);
}
function setCategoryTree(link)
{
var categoryTree = document.getElementById("categoryTree");
/* climbing the DOM-tree to get the category name (innerHTML of highest "a" tag) */
mainCategory = link.parentNode.parentNode.parentNode.getElementsByTagName("a")[0].innerHTML;
var subcategory = link.innerHTML;
categoryTree.innerHTML = "-- " + mainCategory + " -- " + subcategory;
getRandomProducts(mainCategory);
}
您正在函数中设置变量t
。下次调用此函数时,您将无法使用 var t
。
因此,将变量设置在函数上方(不在其中)
var randomProductsTimeout = false;
function getRandomProducts(category){
randomProductsTimeout = setTimeout()[..]
相关文章:
- 在Angular 2中布线期间保持零部件处于活动状态
- 如何使bxslider仅在移动视图中处于活动状态
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 使用纯javascript而非jquery使所选选项卡处于活动状态并保持非活动状态
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- 返回上一页时,Javascript仍处于活动状态
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- 按钮处于活动状态,焦点无法在Mac FireFox上工作
- 禁用永久活动状态
- 单击我网站中的链接时打开新选项卡,保持当前选项卡处于活动状态
- 网页在等待 AJAX 响应时变为非活动状态
- 广告拦截处于活动状态,然后不要打开超链接到新标签
- 如何创建至少 1 个框处于活动状态的复选框列表
- 如何使按钮具有 :活动状态 1 秒
- JQuery UI 1.11 将选项卡设置为活动状态
- 如何获取链接以保持活动状态
- 限制 .live() 函数在 JavaScript 中变为活动状态的次数
- 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于活动状态
- 确保一次只运行一个 setTimeout(处于活动状态)
- 仅当tab处于活动状态时运行setTimeout