2013-05-11 36 views
-1

我现在正在研究一段JavaScript代码,它将用于重定向显示的计数器页面。问题是,当计数器达到0时,countDown()函数进入无限循环,导致页面保持不变。当然,我还无法解决问题。谁能帮忙?JavaScript中的页面重定向功能的无限循环

你可以看到这里的问题: http://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(); 

编辑:

我已经在读秒()函数和问题做了如下的变化已解决:

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); 
    } 
} 
+0

window.onload = init;将是我的第一个改变,location.replace(page);我的第二个也是最后一个重定向到另一个页面比当前 – mplungjan 2013-05-11 11:46:33

+0

你可能想要'document.all [id]'而不是'document.all.id'或更好,只是除掉'getElementById'之外的所有东西。除非这是一些严重的遗留代码。 – Dennis 2013-05-11 12:15:48

回答

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); 
    } 

我试了一下,它的工作原理。 测试后告诉我你的答复。

+0

是的,你的代码工作得非常好!谢谢! – 2013-05-11 16:47:28

0

你想让它停在0吗?分配的setInterval的变种,然后我们可以使用clearInterval如果0

1

我会做这样的事情:

var b = false; 
    if (time == 0 && b == false) 
    { 
    b = true; 
    window.location = page; 
    return(0); 
    } 
0

您setIinterval继续改变了window.location执行前,然后使这个循环,因为时间是0,应该推出window.location的再次

你应该清除间隔

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

和倒计时无线的第一次执行后第一次== 0则:

clearInterval(IdInterval);