[JS] Transformer valeur en nom de variable...

Résolu
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -  
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis en train de reprendre une carte de France SVG.

J'ai une table contenant la liste des régions avec un état (rétablit ou critique).

Ce que j'aimerai, c'est qu'en fonction de la l'état, la couleur de la région s'affiche soit en vert (pour rétablit), soit en rouge (pour critique).

Pour changer la couleur de fond d'une région, je dois faire

region.iledefrance.attr("fill", "red");

Mais comment faire ça de manière dynamique?

En fait j'ai fais une fonction qui reçoit en paramètre le nom de la région et l'état :

function changeCouleur(nomRegion, etat)
 {
  var couleur = whitesmoke;

  if (etat == "valide")
  {
   couleur = "green";
  }
  else if(etat == "critique")
  {
   couleur = "indianred";
  }

  region.nomRegion.attr("fill", couleur);
 }


Et voici l'appel de la fonction :

<?php
$sql = "SELECT nom_region, etat
				FROM carte_france";

		$req = mysql_query($sql) or die ("Erreur de requête SLQ");
	?>

	<div id="carte_france">
		<h3 class="titre_carte">CARTE DE FRANCE INTERACTIVE</h3>

		<?php
			while ($liste = mysql_fetch_array($req))
			{ 
				$nom = $liste["nom_region"];
				$etat = $liste["etat"];

				?>
				<script type="text/javascript">
					changeCouleur('<?php echo $nom; ?>', '<?php echo $etat; ?>');
				</script>
				<?php
			}
		?>

		<div id="canvas_france">
		</div>
	</div>


Mais ça ne fonctionne pas, je pense que ça vient de ce nomRegion...

Une idée?

Merci d'avance

3 réponses

Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Yep, j'ai une petite idée, logiquement avec la fonction eval, tu devrait peut-être t'en sortir.
region.eval(nomRegion).attr("fill", couleur);
0
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   21
 
Merci pour la réponse !

J'ai essayé ce que tu m'a proposé, mais rien ne se passe, il ignore ma fonction j'ai l'impression...
0
reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   21
 
J'ai trouvé une solution qui pour le moment fonctionne.

J'ai changé ma fonction :

if (reg !== null)
	{
		var reg = nom.split(";");
		var seuil = etat.split(";");

		var couleur = "whitesmoke";

		for (var state in region)
		{
			for (var i = 0; i < reg.length; i++)
			{
				if (seuil[i] == "valide")
				{
					couleur = "darkgreen";
				}
				else if (seuil[i] == "critique")
				{
					couleur = "darkred";
				}

				region[reg[i]].attr("fill", couleur);
			}
		}		
	}
0