2010-12-08 6 views
1

Salut J'essaie de créer des variables dynamiques mais je dis que la variable v0 (à v5) n'est pas définie.javascript - variables dynamiques

td.each(function(i){ 
eval('var v' + i + ' = \'' + $(this).html() + '\';'); 
}); 

toute aide serait grandement appréciée.

+0

pourquoi? ce qui se termine est-ce à atteindre? –

Répondre

4

Cela semble être une mauvaise idée.

Y a-t-il une raison pour laquelle vous ne pouvez pas faire cela?

var tdHtml = td.map(function() { return $(this).html(); }).get(); 
+0

voyant que «je» sera un index de base zéro, on pourrait aussi bien déclarer «tdHtml» que «[] ', puisque c'est exactement l'utilisation pour laquelle les tableaux étaient destinés. –

+0

@David Hedlund Ah oui, j'ai changé son fonctionnement et j'ai oublié de changer le littéral de départ. À votre santé. – alex

4

Oh mon Dieu. Si vous voulez créer une variable dynamique globale, vous ne devez pas utiliser var. Dans ce contexte, il crée une variable qui est locale à l'intérieur de chaque fonction, ce qui est tout à fait inutile (et le rendra indéfini en dehors de la boucle, ce que vous expérimentez). Au lieu de cela, vous devriez le faire comme ceci:

td.each(function(i){ 
    window['v' + i] = $(this).html(); 
}); 

L'inconvénient avec le code ci-dessus est que les variables globales ne sont pas vraiment bien non plus.

D'autre part, si vous voulez une variable locale (si par exemple, il y aura plus de code dans la boucle qui utilise ce varaible, alors je le ferais comme ceci:

td.each(function(i){ 
    var dynVars = {}; 
    dynVars['v' + i] = $(this).html(); 

    alert(dynVars.v4); // use the dynamic variables by saying "dynVars.NAME" 

}); 

Vous pouvez combiner Ces deux solutions, en mettant la déclaration de dynvars (var dynVars = {}) dans le champ d'application où vous voulez pouvoir accéder à vos variables à la place.Aussi longtemps qu'il est également visible dans ce rappel, tout se passera bien

Questions connexes