09-07-2014, 04:45 PM
Jusqu'à là j'affiche donc la liste de mes construction sans rien, pas de soucis.
Voici le javascript
Code :
<script type="text/javascript">
var tempsRestant = parseFloat('<?php echo $tempsRestant; ?>');
var i = ('<?php echo $listeconstruction["id"]; ?>');
window["tempsConstruction"+i] = tempsRestant;
//alert("La fonction crée va être celle de l'id"+i);
window['temps'+i] = function(o)
{
alert("Le temps décrémenté est celui de l'id :"+o);
window["tempsConstruction"+o]--;
if(window["tempsConstruction"+o]<=0)
{
document.getElementById('duree'+o).innerHTML = "Terminé";
document.location.href="batiment.php?finish=true";
}
else
document.getElementById('duree'+o).innerHTML =
secondsToTime(parseInt(window["tempsConstruction"+o]));
}
alert("La fonction intervalée va etre l'id :"+i);
setInterval(function() { window['temps'+i](i); }, 1000);
</script>
Voilà, en gros j'essaye de faire en sorte que si j'ai 3 constructions, ce soit 3 fonctions
temps1, temps2 et temps3 qui s'activent et qui agissent chacune sur respectivement tempsConstruction1, tempsConstruction2, tempsConstruction3.
Pourquoi ne pas tout simplement avoir fait une seule fonction qui en fonction du paramètre changerai ce span là ? Eh bien j'ai commencé par ça, mais comme le résultat n'était pas celui attendu, j'ai "supposé" que des setInterval sur des fonctions du même nom s'annulaient, d'où cette méthode.
Résultats :
Avec une seule construction, tout marche bien.
Avec plus d'une, seulement la dernière de la liste est décrémentée (du nombre de constructions en cours) Mes alert m'indiquent effectivement que c'est le dernier id qui est pris en compte, alors que pourtant chaque fonction est censée agir sur un id propre (l'utilisation des window[variable])
Y a t'il un quelconque mécanisme obscur dont je ne connaîtrais pas l'existence provoquant cela ? Ai-je loupé quelque chose de très simple ? Je suis presque sûr d'avoir bien vérifié la portée de chaque variable incriminée, d'où mon incompréhension, et qui plus est, mon post sur ce forum.
Cordialement !