2010-12-08 3 views
1

Привет Я пытаюсь сделать динамические переменные, но он говорит, что переменная v0 (до v5) не определена.javascript - динамические переменные

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

любая помощь была бы очень оценена.

+0

почему? Для чего это нужно? – 2010-12-08 07:26:01

ответ

4

Это звучит неплохо.

Есть ли причина, по которой вы не можете этого сделать?

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

Видя, что `i` будет индексом на основе нуля, можно также объявить` tdHtml` как `[] `, так как это именно то, для чего предназначались массивы. – 2010-12-08 07:31:07

4

О, мой.

Если вы хотите создать глобальную «динамическую переменную», вы не должны использовать var. В этом контексте он создает переменную, которая является локальной внутри каждой функции, что совершенно бесполезно (и вызовет ее неопределенность вне цикла, что и есть то, что вы испытываете). Вместо этого вы должны сделать это следующим образом:

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

Недостатком вышеуказанного кода является то, что глобальные переменные тоже не очень большие.

С другой стороны, если вы хотите локальную переменную (если, например, будет больше кода в цикле, который использует этот Название переменной, то я хотел бы сделать это следующим образом:

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

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

}); 

Вы могли бы объединить эти два решения, помещая объявление dynvars (var dynVars = {}) в область, где вы хотите получить доступ к своим переменным. Пока это также видно в этом обратном вызове, все будет хорошо работать.

Смежные вопросы