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

Résolu/Fermé
reaverlost Messages postés 150 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 - Modifié par reaverlost le 17/06/2014 à 15:26
reaverlost Messages postés 150 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 - 18 juin 2014 à 16:22
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 vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
17 juin 2014 à 18:57
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 jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
18 juin 2014 à 15:47
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 jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
18 juin 2014 à 16:22
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