Comment faire d'une chaine, un nom de variable ?

Chouk -  
 Chouk -
Bonjour,


je vous explique mon problème :


je fais une application web et sur une page, je construit un tableau (avec des div et du css) avec une vingtaine de lignes pour chaque mois de l'année. J'ai donc une vingtaine de champs pour chaque mois (un pour chaque ligne).
Les id des champs sont une concaténation de l'id du champ (composé du champ et de la ligne) + l'id du mois. Ils sont donc à moitié identiques (pour retrouver la ligne souhaitée par la suite) mais l'id du mois est différent.
Chaque ligne est reconnue grace a une lettre de l'alphabet.


Pour effectuer des calculs, j'ai besoin de récupérer les champs concernés.
Mon problème est donc de pouvoir récupérer chaque champ en faisant une boucle (au lieu d'écrire 26 fois le même bout de code, pour les 26 lettres de l'alphabet !).


J'ai donc par exemple :
le champ a qui a pour value ="12"
le champ b qui a pour value ="56"
etc.


J'ai fais un tableau :
alphabet=new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");



et ma boucle :
for (i=0; i<alphabet.lenght; i++)
{
lettre="chaine"+"_"+alphabet[i];
lettre=$("#"+lettre).val();
if(lettre=="")
{
lettre=0;
}
}



Le code ne fonctionne pas, je n'arrive pas à transformer les chaines de mon tableau alphabet en variable.

J'ai essayer avec eval mais il ne récupère que les valeurs et moi je veux uniquement le nom de variable, pas son contenu.

Ah oui j'oubliais, j'utilise jQuery...

Si quelqu'un peut m'aider..

Merci

(
A voir également:

1 réponse

Quo
 
alphabet=new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
var lettre = new Object();

for (i=0; i<alphabet.lenght; i++)
{

if($("#chaine"+"_"+alphabet[i]).val()=="")
{
lettre[alphabet[i]]=0;
}else{
lettre[alphabet[i]]=$("#chaine"+"_"+alphabet[i]).val();
}

}

Pas testé alors il peut y avoir des problème de frappe, mais théoriquement ca marchera

Après tu pourra accéder a tes valeurs par lettre['g']
0
Chouk
 
Merci de ton aide, et très rapide en plus de ça!

J'ai essayé ton code mais malheureusement cela ne fonctionne pas. Enfin si mais j'ai besoin de transformer les chaines en variables pour pouvoir les utiliser par la suite dans le code dans des formules. Or la j'ai une erreur car dans une fonction qui est appelé plus tard, je passe en paramètre une lettre b, et je fais i+=b.length;

l'erreur est : TypeError: b is undefined
0
Quo
 
Comme je l'ai dit dans ma dernière phrases tes valeurs sont stocké sous la variable lettre[TAPE ICI TA LETTRE ENTRE GUILLEMETS]

Pour reprendre ton exemple
i+=lettre['b'].length;

Oui il faudra modifier ta fonction et non il n'y a pas d'autres solution. :)
0
Chouk
 
Oui je sais j'ai bien changé. J'appelle ma formule comme ça :
formule=Remplace(formule,"b",lettre["b"]);

et ma fonction est :
function Remplace(expr,a,b) {
// et là, je fais : i+=b.length;
}

donc lors de l'appel de la fonction c'est bien lettre["b"] que je fais
0
Quo
 
A mon avis c'est ta fonction qui est en tort.

Essaye alert(lettre['b']); avant ta fonction.
0
Chouk
 
justement l'alert affiche "undefined"... :-/
0