2010-12-08 17 views
1

Hallo Ich versuche, dynamische Variablen zu machen, aber es heißt `Variable v0 (bis v5) ist nicht definiert.Javascript - dynamische Variablen

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

jede Hilfe würde sehr geschätzt werden.

+0

Warum? Was endet, ist das zu erreichen? –

Antwort

4

Das klingt nach einer schlechten Idee.

Gibt es einen Grund, warum Sie das nicht tun können?

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

sehen, da "i" wird ein Null-basierten Index, könnte man auch erklären, "tdHtml" als '[] ', da dies genau die Verwendung ist, für die Arrays gedacht waren. –

+0

@David Hedlund Ah ja, ich habe die Funktionsweise geändert und vergessen, das Startliteral zu ändern. Prost. – alex

4

Oh mein. Wenn Sie eine globale "dynamische Variable" erstellen möchten, sollten Sie var nicht verwenden. In diesem Kontext wird eine Variable erstellt, die innerhalb der Funktion "each-function" lokal ist, was ziemlich nutzlos ist (und dazu führt, dass sie außerhalb der Schleife undefiniert ist, was Sie gerade erleben). Stattdessen sollten Sie es so tun:

Der Nachteil mit dem obigen Code ist, dass globale Variablen auch nicht wirklich groß sind.

Auf der anderen Seite, wenn Sie eine lokale Variable wollen (wenn zum Beispiel wird es mehr Code in der Schleife sein, die diese varaible verwendet, dann würde ich es tun, wie folgt:

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

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

}); 

Sie kombinieren könnten Diese beiden Lösungen können Sie verwenden, indem Sie die Deklaration von Dynvars (var dynVars = {}) in den Bereich einfügen, in dem Sie auf Ihre Variablen zugreifen möchten.Solange es auch in diesem Callback angezeigt wird, funktioniert alles einwandfrei