Meine Seite hat eine Tabelle mit einer Reihe von Dropdown-Menüs in einer Spalte (die alle eine Reihe von Zahlen enthalten). Ich möchte jedes Mal eine Funktion ausführen der Werte wird geändert, das nimmt die Summe der Werte und zeigt das Ergebnis auf der Seite an. Ich glaube, dass meine Funktion (totalMarks) eine Sammlung aller meiner Dropdown-Menüs erhält, diese dann durchläuft, den Gesamtwert des ausgewählten Index addiert und dann die Gesamtmarkierungen innerhalb einiger h2-Tags anzeigt. Liegt mein Problem in der Aufzählung der Dropdown-Menüs oder woanders?Summe der ausgewählten Elemente eines Dropdown-Menüs für Seiten
function markForm(tagID) {
var x = document.getElementById(tagID)
var pre = document.createElement("pre");
x.appendChild(pre);
var SectionDetails = [
{ name: "Dynamic Table", maxMarks: 20},
{ name: "IntelliJ usage", maxMarks: 10},
{ name: "Calendar Controller", maxMarks: 30},
{ name: "Active Form", maxMarks: 20},
{ name: "Object Database", maxMarks: 20}
];
var table = pre.appendChild(document.createElement("table"));
var tableHeader = table.appendChild(document.createElement("thead"));
var tableRow = tableHeader.appendChild(document.createElement("tr"));
var headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Section"));
headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Max Mark"));
headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Comments"));
headRow = tableRow.appendChild(document.createElement("th"));
headRow.appendChild(document.createTextNode("Mark"));
var resultsRows = table.appendChild(document.createElement("tbody"));
for (var i = 0; i < SectionDetails.length; i++) {
tableRow = resultsRows.appendChild(document.createElement("tr"));
var tableData = tableRow.appendChild(document.createElement("td"));
tableData.appendChild(document.createTextNode(SectionDetails[i].name));
tableData = tableRow.appendChild(document.createElement("td"));
tableData.appendChild(document.createTextNode(SectionDetails[i].maxMarks));
tableData = tableRow.appendChild(document.createElement("td"));
var tarea = document.createElement("textarea");
tarea.value = "Enter Comments";
tableData.appendChild(tarea);
tableData = tableRow.appendChild(document.createElement("td"));
var dropDown = document.createElement("select");
dropDown.name = SectionDetails[i].name;
dropDown.setAttribute("onchange", totalMarks());
for (var j = 0; j < (SectionDetails[i].maxMarks + 1); j++) {
var listItem = new Option(j);
listItem.value=j;
dropDown.appendChild(listItem);
}
tableData.appendChild(dropDown);
}
var h2 = document.createElement("h2");
h2.id = "headline";
h2.innerHTML = "Total Marks: 0";
x.appendChild(h2);
}
function totalMarks() {
var total = 0;
var ddmenus = document.getElementsByTagName("select");
for (var a = 0; a < ddmenus.length; a++) {
total = total + ddmenus[a].options[ddmenus[a].selectedIndex].value;
}
document.getElementsByTagName("h2").innerHTML = "Total Marks: " + total;
}
Wie die Seite aussehen soll, und tut, wenn ich die Zeile "document.getElementById (" marksline ") innerHTML- =. "Nicht enthalten Gesamt Marks:" + Gesamt;"
Wie die Seite aussieht, wenn ich die oben genannte Zeile im Code lassen.
Dank macht Sinn, aber aus irgendeinem Grund, wenn ich die letzte Zeile hinzufügen, um die Summe anzuzeigen, scheint meine Schleife, die meine Tabelle zu arbeiten, wenn es die Erstellung des ersten Dropdown-Menüs erreicht, ich werde einige Screenshots hinzufügen in der op. Irgendwelche Ideen? – Chaz
Du solltest am Ende nur einen h2 mit id = "headline" haben, sonst wird es kaputt gehen. Gibt es eine Chance, dass Sie versuchen, mehr als ein h2 mit dieser ID zu erstellen? Vielleicht hilft ein bisschen mehr Code, um zu verstehen, was Sie tun. Oder schauen Sie sich die Konsole für Fehler an. – Tallerlei
Ich habe nur das eine h2 im Dokument, also glaube ich nicht, dass es das ist, könnte es sein, dass ich die Dropdown-Menüs erstellen und die Funktion onchange aufrufen, so dass es sofort ausgeführt wird, bevor das h2-Element erstellt wird? Ich habe jetzt den vollständigen Code zur OP hinzugefügt. Ok, die Konsole sagt, was ich erwähnt habe, ist der Fehler, der einfachste Weg, um das zu umgehen? – Chaz