2014-05-21 6 views
3

je la fonction suivante,Redirection après alerte() ne ne fonctionne pas

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

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

qui est appelé beaucoup par

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

Si la deuxième déclaration est vraie, la mise en spectacle de dialogue et si Je clique sur "OK", il réapparaît, et encore, et encore ... pas de redirection, pourquoi?

+1

'x - = y <= z' Ne pas écrire un code ambigu, surtout si vous prévoyez d'avoir d'autres à maintenir cela. –

+0

@MarcB est droite, x- = y <= Z --> x- = y ne donnera pas un nombre Supprimer vos égaux ... si cela ne fonctionne pas après cela, utilisez l'en-tête de fonction php ("Location: url"). – angel

Répondre

0
Code

JavaScript exécute dans un seul thread et le navigateur ne démarre pas recharger la page (en fonction de la nouvelle URL) jusqu'à ce que votre JS finitions d'exécution (par exemple, répondre à un événement, etc.)

Pour aggraver les choses, différents navigateurs se comportent différemment. Par exemple, la prochaine fois que vous ouvrirez un alert() dans Firefox après avoir modifié windows.location, le navigateur récupèrera la modification et rechargera la page (et fermera automatiquement la zone d'alerte()). Chrome, d'autre part, ne prendra pas immédiatement le changement d'emplacement lorsqu'il exécute alert().

TL; DR: N'essayez pas d'utiliser une affectation window.location comme une fonction "exit" globale. Si vous devez sortir de votre code immédiatement, vous pouvez jeter une erreur après avoir changé l'emplacement:

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

Je reçois l'erreur:

côté gauche non valide dans l'affectation

Est-ce que ce travail pour vous?

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