0

私は現在、表示されたカウンターでページをリダイレクトするために使用される JavaScript のコードに取り組んでいます。問題は、カウンターが 0 に達すると、countDown() 関数が無限ループに入り、ページが同じままになることです。そしてもちろん、私はまだ問題を解決できませんでした。誰でも助けることができますか?

ここで問題を確認できます: 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();

編集:

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

完全な 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 に答える
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

0で止めたいですか?setInterval を var に割り当ててから、0 の場合は clearInterval を使用します

于 2013-05-11T11:46:08.187 に答える