2016-03-24 4 views
0

Ich habe an einem umfangreichen Javascript-Programm gearbeitet und eine Funktion zum dynamischen Erstellen von HTML-Tabellen entwickelt, indem ich ein Array nehme, das den Inhalt definiert, mit dem die Tabelle gefüllt wird. Ich möchte die Funktion aufrufen etwas wie folgt aussehen:Übergabe von Variablen innerhalb von Strings und Funktionen an eine andere Funktion

tableConstructor([ 
    "<p>" + changingVariable + "</p>", 
    "<p>" + arrayOfData[changingVariable] + "</p>", 
    secondFunction(changingVariable), 
    "<button onclick='thirdFunction(" + changingVariable + ")'></button>" 
]); 

mit jeder Zeile sein Inhalt für eine andere Spalte in der Tabelle Ich schaffe.

Das Problem ist, dass die changingVariable immer ausgewertet wird, bevor die Daten an die tableConstructor-Funktion gesendet werden, so dass die gesamte Tabelle endet mit den gleichen Daten den ganzen Weg hinunter in jeder Spalte ausgefüllt wird.

Ich brauche die changingVariable und die Funktion/Arrays, die changingVariable verwenden, um zu bewerten, sobald sie innerhalb der tableConstructor Funktion sind, aber nicht vorher. Weiß jemand, wie ich das zur Arbeit bringen könnte? Ich möchte, dass es für jede der oben genannten vier Beispielzeilen funktioniert. Hier ist, was ich habe bisher für die tableConstructor Funktion selbst:

function tableConstructor (content) { 
    tableRows = []; 

    tableDowns = []; 

    for (i in arrayOfData) { 
    tableRows[i] = document.createElement("tr"); 

    containerElement.appendChild(tableRows[i]); 

    for (changingVariable in content) { 
     tableDowns[tableDowns.length] = document.createElement("td"); 

     tableRows[i].appendChild(tableDowns[tableDowns.length - 1]); 

     tableDowns[i * parseInt(content.length) + parseInt(changingVariable)].innerHTML = content[changingVariable]; 
    } 
    } 
} 
+0

Können Sie nicht eine Funktion übergeben, die die Daten im laufenden Betrieb als Parameter statt als Array generiert? – skypjack

+0

Können Sie ein Beispiel geben, wie das funktionieren würde? – Nalax

Antwort

0

Verwenden Sie eine Funktion statt einer Variablen. So etwas wie:

var changingVariable = 1; 
function f() { 
    return changingVariable++; 
}; 

function tableConstructor (content) { 
    console.log(content); 
}; 

tableConstructor("First: " + f() + " Second: " + f()); 
// -> First: 1 Second: 2 

Die Funktion wird bei jedem Aufruf anders ausgewertet.

+0

Das löst mein Problem nicht, die 'f'-Funktion wird immer noch vor der' tableConstructor'-Funktion ausgewertet. – Nalax

Verwandte Themen