2014-05-21 157 views
3

我有以下功能,重定向()不工作

Render: function (level, cpi, t1) 
{ 
    //... 
     if ((level.t0.value -= (t1 - this.t0)/1000) <= 0) { 
      alert("Game over!"); 

      window.location.href = "levels.php"; 
     } 
    //... 
} 

這是由

(function frame() 
{ 
    //... 
     Level.Render(level, cpi, Date.now()); 
    //... 
    requestAnimationFrame(frame); 
})(); 

如果第二個說法爲真,對話框顯示出來,如果叫了很多我點擊「確定」,它再次出現,再次,並且再次......沒有重定向,爲什麼?

+1

'X - = Y <= Z',特別是如果你打算不寫曖昧代碼,讓別人保持這一點。 –

+0

@MarcB是對的,x- = y <= Z --> x- = y不會給出數字 刪除等於... 如果在此之後不起作用,請使用php函數頭(「Location:url」)。 – angel

回答

0

JavaScript代碼執行單線程和瀏覽器不啓動重新加載頁面(基於新的URL),直到你的JS執行完畢(如響應事件等)

更糟的是,不同的瀏覽器行爲有所不同。例如,下次您在更改windows.location後,在Firefox中打開alert()時,瀏覽器將接收更改並重新加載頁面(並自動關閉alert()框)。另一方面,Chrome在執行alert()時不會立即取得位置更改。

TL; DR:不要嘗試使用window.location分配作爲全局「退出」功能。如果您需要立即擺脫你的代碼,你可以拋出一個錯誤改變位置後:

Render: function (level, cpi, t1) 
{ 
    //... 
     if ((level.t0.value -= (t1 - this.t0)/1000) <= 0) { 
      alert("Game over!"); 

      window.location.href = "levels.php"; 
      throw("Done"); 
     } 
    //... 
} 
0

,我發現了錯誤:

無效的左手側分配

這是否對你的工作?

level.t0.value -= (t1 - this.t0)/1000; 
if (level.t0.value <= 0) { 
    alert("Game over!"); 
    window.location.href = "levels.php"; 
}