0

我现在正在编写一段 JavaScript 代码,该代码将用于重定向带有显示计数器的页面。问题是,当计数器达到 0 时,countDown() 函数进入无限循环,导致页面保持不变。当然,我还不能解决这个问题。任何人都可以帮忙吗?

你可以在这里看到问题: //kibristaodtuvarmis.com/index.html

代码如下所示:

var time = 10;
var page = "http://blog.kibristaodtuvarmis.com";


function countDown()
{        
  if (time == 0)
  {
     window.location = page;
     return(0);
  }
  else
  {       
    time--;
    gett("container").innerHTML = time;
  }
}

function gett(id)
{
    if(document.getElementById) return document.getElementById(id);
    if(document.all) return document.all.id;
    if(document.layers) return document.layers.id;
    if(window.opera) return window.opera.id;
}

function init()
{
    if(gett("container"))
    {
        setInterval(countDown, 1000);
        gett("container").innerHTML = time;
    }
    else
    {
        setTimeout(init, 50);
    }
}

document.onload = init();

编辑:

我对 countDown() 函数进行了以下更改,问题已解决:

var control = false;
function countDown()
{
  if (time == 0 && control == false)
  { 
     control = true;
     window.location = page;
     return(0);
  }
  else if (time > 0)
  {       
     time--;
     gett("container").innerHTML = time;
  }
  else
  {  
     return(0);
  }
}
4

4 回答 4

1

我会做这样的事情:

  var b = false; 
  if (time == 0 && b == false)
  { 
     b = true;
     window.location = page;
     return(0);
  }
于 2013-05-11T11:48:47.590 回答
0

你想让它停在0吗?将 setInterval 分配给 var,如果为 0,则使用 clearInterval

于 2013-05-11T11:46:08.187 回答
0

您的 setIinterval 在更改 window.location 之前继续执行,然后导致此循环,因为时间为 0,应该再次启动 window.location

你应该清除间隔

var IdInterval = setInterval(function () {
//.... code
    }, 10000);

在第一次使用 time==0 执行 countDown 之后:

clearInterval(IdInterval);
于 2013-05-11T11:53:25.240 回答
0

通过替换您的完整 javascript 代码来尝试这部分代码:

   var time = 10;
   var page = "http://blog.kibristaodtuvarmis.com";

   function startCount() {
       time = time - 1;
       console.log(time);
       document.getElementById("container").innerHTML = time;
       startCounter();
   }

   function startCounter() {
       if (time !== 0) {
           setTimeout(function () {
               startCount();
           },1000);
       } else {
           location.href = page;
       }
   }
   if (window.addEventListener) {
     window.addEventListener("load", startCount, false);
   } else if (el.attachEvent)  {
     window.attachEvent("load", startCount);
   }

我试过了,它有效。测试后告诉我你的回复。

于 2013-05-11T12:12:34.600 回答